为啥 matplotlib fill_between 只在 PDF 上绘制边缘线?
Posted
技术标签:
【中文标题】为啥 matplotlib fill_between 只在 PDF 上绘制边缘线?【英文标题】:Why does matplotlib fill_between draw edgelines only on a PDF?为什么 matplotlib fill_between 只在 PDF 上绘制边缘线? 【发布时间】:2012-12-18 01:29:37 【问题描述】:在 python 的matplotlib.fill_between
中,下面的最小工作示例正确地绘制到屏幕和.png
。然而,在生成的.pdf
中,仍然绘制边缘线。我该如何解决这个问题?
from numpy import *
import pylab as plt
# Sample data
X = linspace(0,2*pi,1000)
Y0 = sin(X)
Y1 = sin(X+.2)
Y2 = sin(X+.4)
# fill_kwargs (what am I missing?)
fbk = 'lw':0.0, 'edgecolor':None
ax = plt.subplot(111)
ax.fill_between(X, 0, Y0 , facecolor = 'b', **fbk)
ax.fill_between(X, Y0, Y1, facecolor = 'g', **fbk)
ax.fill_between(X, Y1, Y2, facecolor = 'r', **fbk)
plt.xlim(pi-.8,pi+.5)
plt.ylim(-.5,.5)
plt.savefig('fA.png') # No edge lines
plt.savefig('fA.pdf') # Edge lines!
PNG 结果
PDF 结果
虽然看起来微不足道,但当您堆叠 200 个 fill_between
地块时,它会变得极度成问题,您所看到的只是一团难看的黑色!
【问题讨论】:
【参考方案1】:这并不完美,但我找到了解决方案(如果有更好的解决方案,我会接受)。 Apparently postscript 可能是罪魁祸首:
...请注意,将零线宽解释为 1 像素宽线是 PostScript 所做的。所以唯一的办法 为 PostScript 输出获得真正的零宽度是填充 多边形而不抚摸它。
解决办法是让edgecolor和facecolor一样。这可行,但如果 facecolor 具有透明度,则 edgecolor 似乎不会获得相同的透明度值。
【讨论】:
【参考方案2】:一点都不漂亮,但是如果你把它设置为None,它会抛出这个错误:
Traceback(最近一次调用最后一次): 文件“/usr/local/lib/python2.7/site-packages/matplotlib/artist.py”,第 59 行,> 在 draw_wrapper 绘制(艺术家,渲染器,*args,**kwargs) 文件“/usr/local/lib/python2.7/site-packages/matplotlib/figure.py”,第 1085 行,> 绘制 函数(*参数) 文件“/usr/local/lib/python2.7/site-packages/matplotlib/artist.py”,第 59 行,> 在 draw_wrapper 绘制(艺术家,渲染器,*args,**kwargs) 文件“/usr/local/lib/python2.7/site-packages/matplotlib/axes/_base.py”,行 > 2110,绘制 a.draw(渲染器) 文件“/usr/local/lib/python2.7/site-packages/matplotlib/artist.py”,第 59 行,> 在 draw_wrapper 绘制(艺术家,渲染器,*args,**kwargs) 文件“/usr/local/lib/python2.7/site-packages/matplotlib/lines.py”,第 694 行,> 绘制 gc.set_linewidth(self._linewidth) TypeError:需要浮点数
并继续在没有线条的情况下进行渲染。 Seaborn 现在可以使用堆叠的小提琴图!
0.0 线宽:
没有:
【讨论】:
以上是关于为啥 matplotlib fill_between 只在 PDF 上绘制边缘线?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 matplotlib.PatchCollection 会弄乱补丁的颜色?
为啥使用 matplotlib 无法正确显示 CIFAR-10 图像?
为啥这个混淆矩阵(matplotlib)在 Jupyter Notebook 中看起来被压扁了? [复制]
尝试使用 matplotlib 内联绘图时,为啥在 jupyter notebook 中出现 NonGuiException?