Растеризация нескольких элементов в matplotlib

У меня проблемы при растеризации многих линий на графике с использованием ключевого слова rasterized=True с использованием вывода PDF. Некоторая информация о версии:

  • Matplotlib версия 1.1.1rc
  • Ubuntu 12.04
  • Python 2.7.3

Вот основной пример, который демонстрирует мою проблему:

# Import matplotlib to create a pdf document
import matplotlib
matplotlib.use('Agg')
from matplotlib.backends.backend_pdf import PdfPages
pdf = PdfPages('rasterized_test.pdf')

import matplotlib.pylab as plt

# some test data
import numpy as np
ts = np.linspace(0,2*np.pi,100) * np.ones((200,100)) 
ts += (np.linspace(0, np.pi, 200)[np.newaxis] * np.ones((100,200))).T
ys = np.sin(ts)

fig = plt.figure() 
ax = fig.add_subplot(111)
ax.plot(ts[0], ys.T, color='r', lw=0.5, alpha=0.5, rasterized=True)
pdf.savefig()

pdf.close()

По сути, у меня есть много (в данном случае 200) близко перекрывающихся линий, что делает полученную фигуру (не растеризованную) слишком трудной для загрузки. Я хотел бы растеризовать эти линии так, чтобы метки оси (и другие элементы графика, не показаны) оставались векторами, в то время как траектории решения сглаживаются на одном растровом фоне. Однако, используя приведенный выше код, загрузка изображения все еще занимает много времени, поскольку каждая траектория независимо растеризуется, что приводит к появлению нескольких слоев. (Если я открою полученный PDF-файл с помощью программы, такой как Inkscape, я могу управлять каждой траекторией независимо.)

Можно ли свести все растеризованные элементы в один слой, чтобы размер PDF-файла был значительно уменьшен?

Спасибо!

1 ответ

Решение

Измените код на:

ax = fig.add_subplot(111, rasterized=True)
ax.plot(ts[0], ys.T, color='r', lw=0.5, alpha=0.5)
Другие вопросы по тегам