Pyplot导出到.eps,alpha< 1

时间:2014-01-14 10:48:58

标签: python matplotlib export alpha

我正在尝试绘制一个很好的矩阵,其中突出显示了一些列。我对以下代码的结果非常满意。

import matplotlib.pyplot as plt
import numpy as np

plt.pcolormesh(np.random.rand(10,10), cmap = 'Greys')
plt.axvspan(3,6, color = 'red', alpha = 0.2)
plt.show()

给出一个保存为.png的图像,看起来像

http://imgur.com/To9D0UT

此。问题是,如果我将图像保存为eps,图像会变得更糟,看起来像

https://dl.dropboxusercontent.com/u/8162527/figure_1.eps

此。你可以想象,第二种变体对我来说不是一个选择。

我尝试将好的png图像转换为eps,它有点有效。问题是生成的图像不可缩放,并且比原始图像大100倍(文件大小)。我非常渴望有想法。

1 个答案:

答案 0 :(得分:2)

您可以直接修改由pcolormesh创建的网格的颜色。例如:

import numpy as np
import matplotlib.pyplot as plt

nrows = 10
ncols = 10
a = np.random.rand(nrows, ncols)
pcm = plt.pcolormesh(a, cmap="Greys")

# Apparently need to render once in order to assign facecolors
# to the grid created by pcolormesh:
plt.draw()

fc = pcm.get_facecolors()
fc_grid = fc.reshape(nrows, ncols, -1)

alpha = 0.2
fc_grid[:, 3:6] = (1-alpha)*fc_grid[:, 3:6] + alpha*np.array([1.0, 0, 0, 1])
fc_grid[4:7, 7:] = (1-alpha)*fc_grid[4:7, 7:] + alpha*np.array([0, 1.0, 0, 1])

plt.show()

这是它创建的情节的PNG版本: grid plot

如果将其保存为EPS,则颜色正确无误。