Matplotlib在渲染到PDF时不显示阴影填充

20 投票
2 回答
7271 浏览
提问于 2025-04-16 13:00

我正在尝试在matplotlib中使用填充功能,这个功能在屏幕上显示的时候没问题。但是当我把图保存为pdf格式时,填充的标记却没有显示出来:

import matplotlib
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0,2*np.pi,100)

plt.figure()
plt.fill(x,np.sin(x),color='blue',alpha=0.5,hatch='/')
plt.show()
plt.savefig('./test.pdf',format='pdf')

我在OS X 10.6.6上使用的是matplotlib 1.0.1和pylab。这可能是和平台有关的问题,可能跟后端渲染器有关系,但我不太确定。任何建议都非常感谢。

2 个回答

18

总结一下:在导出PDF时,使用 alpha=.99 可以让填充图案正常显示

快到2020年了,使用 plt.bar() 时的问题依然存在。当我们导出为PNG格式时,一切都显示得很好。但是在导出为PDF时,填充图案就出现了问题。有时候填充图案看不见,有时候放大或缩小时能看到(但在不同的电脑上测试时,有时又看不见),这个问题的原因还不太清楚。

我们发现这个问题和 alpha 选项有关。当使用 alpha=.5 时,颜色和填充图案的可见度都是50%。这样一来,填充图案几乎能看见。所以我们决定试试 alpha=.99,这样一切几乎都能100%显示。

结果成功了!太好了!

在我们的解决方法中,不需要像之前的回答那样重复代码。只需保持颜色选项不变,直接设置 alpha=.99 就可以了。

8

看起来像是个错误。请在GitHub的问题追踪器上提交一个报告。

同时,这里有个临时解决办法:

plt.fill(x,np.sin(x),color='blue',alpha=0.5)
plt.fill(x,np.sin(x),color='None',alpha=0.5,edgecolor='blue',hatch='/')

撰写回答