matplotib:另存为svg或png时,两个重叠的透明图像看起来不同

问题描述 投票:0回答:1

我正在尝试使用matplotlib覆盖两个透明图像并保存结果,但是结果根据文件类型而有所不同。特别是,保存为svg时,它会被洗掉。

这里是一个例子。在这种情况下,我可以在显示两个图像之前将它们添加在一起,但这只是一个简单的示例。实际上,我要做的是更加复杂(具有不同颜色图的不同大小的图像),因此必须分别绘制它们。

示例代码:

f, ax = plt.subplots(figsize=(2,2))
ax.imshow(np.eye(3), alpha=.5)
ax.imshow(np.eye(3)[::-1], alpha=.5)
f.savefig('example.png')
f.savefig('example.svg')

png文件看起来就像在屏幕上一样,但是svg文件看起来已经洗掉了。我想知道如何另存为svg,而没有褪色的效果(即它看起来应该像在屏幕上一样)。

作为一个额外的问题,为什么根据我绘制透明图像的顺序png图看起来会有所不同?第二个图像总是看起来更强。有趣的是,在svg中,两者均被淘汰。

示例另存为png:

saved as png

示例另存为svg:

saved as svg

matplotlib版本:3.1.3python版本:3.7.7

感谢任何提示!

matplotlib svg plot png alpha-transparency
1个回答
0
投票

我会发布我认为正在发生的事情,但是如果有人可以提供更多合法信息,我会接受的。

[我认为每次您使用alpha值调用imshow时,都会使用(new * alpha + current *(1-alpha))将轴中的当前图像与新图像混合。这样的问题是,如果您显示10张图像,每张图像的alpha值为0.5,那么通过迭代混合,第一张图像将被衰减为零,而最后一张图像将达到最终结果的50%。尽管如此,这显然是用于渲染到屏幕并保存为png的方法。

相反,当保存为svg时,它会将每个图像另存为具有自己的alpha的叠加层。 svg容器或渲染器然后使用一些更智能的方法,一次考虑所有叠加的图像。但是,在我的特定情况下,这会导致外观更加褪色,因为所有图像都是部分透明的。

© www.soinside.com 2019 - 2024. All rights reserved.