【问题标题】: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 地块时,它会变得极度成问题,您所看到的只是一团难看的黑色!

【问题讨论】:

    标签: python pdf matplotlib png


    【解决方案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 线宽:

      没有:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多