在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!
虽然看似微不足道,但当你堆叠200 fill_between
个图时,它会变成非常有问题,所有你看到的都是丑陋的黑色!
答案 0 :(得分:10)
这并不完美,但我找到了一个解决方案(并且如果有的话会接受更好的解决方案)。 Apparently后记可能是罪魁祸首:
...请注意将线宽为零解释为1 像素宽线是PostScript的作用。所以唯一的方法 获得一个真正的零宽度的PostScript输出就是填充 多边形而不抚摸它。
解决方案是使edgecolor与facecolor相同。这可行,但如果facecolor具有透明度,则edgecolor似乎不会获得相同的透明度值。
答案 1 :(得分:1)
它根本不漂亮,但是如果你把它设置为None,它会抛出这个错误:
追踪(最近一次通话): 文件" /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行,>抽奖 FUNC(*参数) 文件" /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" ;, line> 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线宽:
没有: