2012-08-23 20 views
6

Mam problemy podczas rasteryzacji wielu wierszy na wykresie za pomocą rasteryzacji = True słowa kluczowego przy użyciu danych wyjściowych w formacie PDF. Niektóre informacji version:Rasteryzacja wielu elementów w matplotlib

  • wersja matplotlib 1.1.1rc
  • ubuntu 12.04
  • python 2.7.3

Oto prosty przykład pokazuje, że mój problem:

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

Zasadniczo mam dużo (w tym przypadku 200) ściśle zachodzących na siebie linii, co powoduje, że wynikowe fi gure (nie rasteryzowane) zbyt trudne do załadowania. Chciałbym rasteryzować te linie tak, aby etykiety osi (i inne elementy wykresu, nie pokazane) pozostały wektorami, podczas gdy trajektorie rozwiązania były spłaszczone na pojedynczym tle rastrowym. Jednak za pomocą powyższego kodu obraz nadal trwa długo, ponieważ każda trajektoria jest niezależnie rasteryzowana, co skutkuje wieloma warstwami. (Jeśli otworzę wynikowy plik PDF za pomocą programu takiego jak inkscape, mogę niezależnie manipulować każdą trajektorią.)

Czy można spłaszczyć wszystkie zrasteryzowane elementy w jedną warstwę, aby rozmiar pdf był znacznie mniejszy?

Dzięki!

Odpowiedz

7

Zmiana kodu:

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

Dzięki za pomoc! Nie wiedziałem, że ustawienie rasteryzacji w innej lokalizacji może zmienić wynik. I skończyło się na użyciu nieco innej wersji, ponieważ miałem inne funkcje na mojej działce, które chciałem zachować w formatach wektorowych. się ja z użyciem pożądanego efektu: 'ax ​​= fig.add_subplot (111); ' ' ax.set_rasterization_zorder (1); ' ' ax.plot (Ts [0], ys.T, color = 'r', lw = 0,5, alpha = 0,5, zorder = 0) ' – pstjohn

Powiązane problemy