我通常ax.set_rasterized(True)
用来光栅化图形,以便在保存为eps
格式时可以处理透明度,但是光栅化也会模糊轴标签和刻度标签,所以有没有办法只光栅化轴内的补丁而不是整个图形?还是有更好的方法来导出透明的 eps 格式?谢谢。
问问题
11268 次
2 回答
8
由于 matplotlib Artists可以被光栅化,任何从 Artist ( http://matplotlib.sourceforge.net/api/artist_api.htmlrasterized
) 派生的类都可以通过设置为的关键字进行光栅化True
。所以你只能光栅化你的补丁。
我只是尝试了一些组合,它似乎工作。但是质量似乎不是很好(另见http://www.mail-archive.com/matplotlib-users@lists.sourceforge.net/msg13276.html)。
import numpy as np
import matplotlib.pyplot as plt
def add_patch(ax, **kwargs):
if 'rasterized' in kwargs and kwargs['rasterized']:
ax.set_rasterization_zorder(0)
ax.fill_between(np.arange(1, 10), 1, 2, zorder=-1, **kwargs)
ax.set_xlim(0, 10)
ax.set_ylim(0, 3)
if 'alpha' in kwargs and kwargs['alpha'] < 1:
txt = 'This patch is transparent!'
else:
txt = 'This patch is not transparent!'
ax.text(5, 1.5, txt, ha='center', va='center', fontsize=25, zorder=-2,
rasterized=True)
fig, axes = plt.subplots(nrows=4, sharex=True)
add_patch(axes[0], alpha=0.2, rasterized=False)
add_patch(axes[1], alpha=0.2, rasterized=True)
add_patch(axes[2], rasterized=False)
add_patch(axes[3], rasterized=True)
plt.tight_layout()
plt.savefig('rasterized_transparency.eps')
我将其转换eps
为 png 以在浏览器中显示:
于 2012-04-08T11:08:51.153 回答
2
如果您指定 dpi,结果会更好 - 这似乎默认为相当低的值。例如,将最后一行更改为
plt.savefig('rasterized_transparency.eps',dpi=200)
并且文件增长到 4.5M,在 Acrobat 中放大 200% 看起来很好。但是我同意可能有更紧凑的格式支持透明度。
于 2016-02-03T07:13:37.997 回答