在我的python程序中,我用imshow绘制了一些2D图形:
img=imshow(data,
interpolation='none',
vmin=0.0001,
vmax=0.01,
cmap=custom_map,
norm=LogNorm()
)
当我将图形保存为* .eps或* .pdf时,我在图片中得到一些奇怪的线条,其中data
的值非常接近vmin
。
当我将图表保存为* .png或* .svg或* .jpg时,此错误不会发生。
如何避免python绘制这些奇怪的行?
修改 这是一个应该重现问题的最小代码。至少我一直都会得到错误......
from matplotlib.colors import LogNorm
import numpy as np
import matplotlib.pyplot as pl
A=np.array([[0.000000,0.000426],[0.000000,0.000524]], dtype=np.float)
pl.imshow(A, interpolation='none', norm=LogNorm())
pl.savefig('test.eps')
pl.savefig('test.png')
即使您不使用LogNorm()
但使用np.log(A)
,输出中也会出现问题。
编辑2 与
A=np.array([[np.log(0),np.log(0),np.log(0.1),np.log(0.000426)],
[np.log(0),np.log(0),np.log(0),np.log(0.000524)]], dtype=np.float)
问题仅发生在从np.log(0)到某些实际值的边界处,如下图所示
答案 0 :(得分:0)
似乎这是LogNorm()的问题和数组中的零...所以坏像素应该有一个特殊的颜色值,可以手动设置。对于正在寻找答案的人:这里有一个描述:How can I plot NaN values as a special color with imshow in matplotlib?
现在更改开场帖中的代码:
cmap = matplotlib.cm.jet
cmap.set_bad('w',1.)
pl.imshow(A, interpolation='none', cmap=cmap, norm=LogNorm())
这样,eps输出是正确的 - 或者更好:正如所希望的那样。
如果还有其他想法,请将其添加到评论或答案中。