Python Matplotlib:保存屏蔽数组的eps时的黑色方块,为什么?

时间:2015-01-16 16:33:41

标签: python matplotlib eps

当我运行以下代码时:

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

x_data = np.random.randn(10000)
y_data = np.random.randn(10000)
hist, xbins, ybins = np.histogram2d(x_data, y_data, bins=100)
hist_masked = np.ma.masked_where(hist<1e-3, hist)

cmap = matplotlib.cm.jet
#cmap.set_bad('w',1.)

fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.imshow(hist_masked.T, interpolation = 'none', cmap = cmap)
plt.savefig('test.eps',transparent=False)
plt.show()

情节在屏幕上看起来很好但是eps文件有额外的黑色&#34;正方形&#34;。为什么? 只有当我将情节保存为eps时才会出现这些黑色方块,即使使用eps,我也可以通过取消注释&#34; set_bad&#34;来消除它们。代码中的命令。如果我正在绘制一个蒙面数组,为什么该绘图必须使用该命令?

谢谢!

1 个答案:

答案 0 :(得分:0)

屏蔽数组hist_masked错误的值设置为np.nan,matplotlib中的颜色映射具有nans的预定义值:

In [5]: plt.cm.jet._rgba_bad
Out[5]: (0.0, 0.0, 0.0, 0.0)

默认情况下,它设置为黑色并且完全透明。但是,当您在保存时设置transparent=False时,这些点实际上变为可见(因为alpha设置为1)。

使用时:

cmap.set_bad('w',1.)

您将错误的颜色设置为白色('w'),因此您不会在生成的eps文件中看到它们。

eps文件无法处理透明度。但是,您可以考虑保存到pdf并删除标记transparency=False。这也可以解决问题。