Python Pyplot导出到.eps时使用alpha<;1.

Python Pyplot导出到.eps时使用alpha<;1.,python,matplotlib,export,alpha,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的图像,看起来像 这个。问题是,如果我将图像保存为eps,图像会变得更糟,看

我正试图画一个漂亮的矩阵,突出显示一些列。我对下面代码的结果非常满意

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,图像会变得更糟,看起来像

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


我试着把漂亮的png图像转换成eps,它有点效果。问题是生成的图像不可伸缩,并且比原始图像大100倍(文件大小)。我迫切需要想法。

您可以直接修改由
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,则颜色正确。

值得考虑文件大小的增加。如果仅仅因为它是矢量图形而需要eps,那么将文件保存为
.svg
可以正确地生成透明度。我对它的了解还不够,无法给出明确的答案,但reading建议在postscript中支持这种透明度。值得一提的是,它可以与SVG和PDF格式一起使用。谢谢,实际上,另存为.SVG会生成正确的透明胶片,但是我需要一个.eps版本才能放入LaTeX文件中。问题是,当我将svg转换为eps时,图像变得奇怪。我只是尝试了一些在线服务的转换,你有什么建议吗?我想建议使用pdflatex不会有太大帮助?@WarrenWeckesser不是一个真正的选项,不。我不是本文的主要作者,所以编译方法不是我的职责:)这是经过深思熟虑后得出的相同解决方案。透明度的概念显然不能与eps格式相结合。这不是我所希望的解决方案,但我想它会成功的。谢谢。您需要渲染一次的原因是为了强制进行颜色映射。一个更直接的方法是手动完成所有颜色映射,而不是在生成的
[…,3]
RGB数组上显示。