2012-08-23 14 views
6

Tengo problemas al rasterizar muchas líneas en un trazado usando la palabra clave rasterized = True usando la salida pdf. Algunos información de la versión:Rasterización de elementos múltiples en matplotlib

  • versión matplotlib 1.1.1rc
  • ubuntu 12.04
  • Python 2.7.3

Aquí hay un ejemplo básico que demuestra mi problema:

# 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() 

Esencialmente, tengo mucho (200 en este caso) de líneas muy superpuestas que hacen que la gure (no rasterizado) demasiado difícil de cargar. Me gustaría rasterizar estas líneas, de modo que las etiquetas de los ejes (y otros elementos de la gráfica, no mostrados) sigan siendo vectores mientras que las trayectorias de la solución se aplanan en un único fondo de trama. Sin embargo, utilizando el código anterior, la imagen aún tarda mucho tiempo en cargarse, ya que cada trayectoria se rasteriza de forma independiente, lo que genera múltiples capas. (Si abro el pdf resultante con un programa como inkscape, puedo manipular cada trayectoria de forma independiente.)

¿Es posible aplanar todos los elementos rasterizados en una sola capa, por lo que el tamaño del pdf se reduciría en gran medida?

Gracias!

Respuesta

7

Cambiar el código para:

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

Gracias por la ayuda! No sabía que configurar la rasterización en una ubicación diferente cambiaría el resultado. Terminé usando una versión ligeramente diferente, ya que tenía otras características en mi trama que quería mantener en formato vectorial. ahora estoy usando para el efecto deseado: 'ax = fig.add_subplot (111);' ' ax.set_rasterization_zorder (1);' ' ax.plot (ts [0], ys.T, color = 'r', lw = 0.5, alfa = 0.5, zorder = 0) ' – pstjohn

Cuestiones relacionadas