我正在尝试绘制一个很好的矩阵,其中突出显示了一些列。我对以下代码的结果非常满意。
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的图像,看起来像
此。问题是,如果我将图像保存为eps,图像会变得更糟,看起来像
https://dl.dropboxusercontent.com/u/8162527/figure_1.eps
此。你可以想象,第二种变体对我来说不是一个选择。
我尝试将好的png图像转换为eps,它有点有效。问题是生成的图像不可缩放,并且比原始图像大100倍(文件大小)。我非常渴望有想法。
答案 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版本:
如果将其保存为EPS,则颜色正确无误。