Обычно я использую ax.set_rasterized(True) для растеризации фигуры, чтобы она могла обрабатывать прозрачность при сохранении в формате eps, но растеризация также размывает метки осей и метки делений, поэтому есть ли способ растеризовать только участки внутри оси, а не всю фигуру? или есть лучший вариант для экспорта формата eps с прозрачностью? Спасибо.
Как лучше растрировать график, не размывая метки в matplotlib?
Ответы (2)
Поскольку matplotlib Artists может быть растрирован, любой класс, производный от Artist (http://matplotlib.sourceforge.net/api/artist_api.html) может растрировать с ключевым словом rasterized, установленным в True. Таким образом, вы можете только растеризовать свои патчи.
Я только что попробовал несколько комбинаций, и это, кажется, работает. Однако качество кажется не очень хорошим (см. также http://www.mail-archive.com/[email protected]/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, чтобы показать его в браузере:

См. также: Как сохранить рисунки в pdf как растровые изображения в matplotlib.
Результаты будут лучше, если вы укажете dpi, которое по умолчанию имеет довольно низкое значение. Например, измените последнюю строку на
plt.savefig('rasterized_transparency.eps',dpi=200)
и файл вырастает до 4,5М и отлично выглядит в Acrobat при увеличении до 200%. Однако я согласен с тем, что, вероятно, существуют более компактные форматы, поддерживающие прозрачность.
pdf? Это сохранит прозрачность без растеризации. - person Avaris   schedule 07.04.2012set_rasterization_zorder- это путь. Проверьте это. - person Avaris   schedule 07.04.2012