2013-04-24 12 views
54

Jak mogę zapisać wykresy Pythona w bardzo wysokiej jakości?zapisywanie obrazów w pythonie w bardzo wysokiej jakości

Czy podczas powiększania obiektu zapisanego w pliku PDF nie ma rozmycia?

Co jest najlepszym trybem do zapisania?

png, eps? Lub jakiś inny? Nie mogę wykonać pdf, ponieważ istnieje ukryty numer, który zdarza się w wyniku kompilacji Latexmk.

Odpowiedz

77

Jeśli używasz matplotlib i próbujesz uzyskać dobre wyniki w dokumencie z lateksu, zapisz jako eps. Konkretnie, spróbuj coś takiego po uruchomieniu polecenia do wykreślenia obrazu:

plt.savefig('destination_path.eps', format='eps', dpi=1000) 

I odkryli, że pliki EPS działa najlepiej, a parametr dpi jest to, co naprawdę sprawia, że ​​wyglądają dobrze w dokumencie.

UPDATE:

Aby określić orientację rysunku przed zapisaniem prostu wywołać następujące przed wywołaniem plt.savefig, ale po utworzeniu wykresu (zakładając, że są wykreślane przy użyciu siekiery z nazwą ax):

ax.view_init(elev=elevation_angle, azim=azimuthal_angle) 

Gdzie elevation_angle jest liczbą (w stopniach) określającą kąt biegunowy (w dół od pionowej osi z), a azimuthal_angle określa kąt azymutu (wokół osi Z).

Uważam, że najłatwiej jest określić te wartości, najpierw wykreślając obraz, a następnie obracając go i obserwując bieżące wartości kątów w dolnej części okna tuż poniżej rzeczywistego wykresu. Pamiętaj, że pozycje x, y, z pojawiają się domyślnie, ale są zastępowane dwoma kątami, gdy zaczynasz klikać + przeciągać + obracać obraz.

+0

@ spencerlon2 co jeśli chcę zmienić orientację figury przed zapisaniem? – dustin

+0

Zobacz zaktualizowaną odpowiedź. – spencerlyon2

31

Wystarczy dodać moje wyniki, również przy użyciu matplotlib.

.eps sprawił, że cały mój tekst został pogrubiony i usunięto przezroczystość. .svg dał mi zdjęcia w wysokiej rozdzielczości, które wyglądały jak mój wykres.

import matplotlib.pyplot as plt 
fig, ax = plt.subplots() 
# Do the plot code 
fig.savefig('myimage.svg', format='svg', dpi=1200) 

użyłem 1200 dpi, ponieważ wiele czasopism naukowych wymaga wizerunki 1200/600/300 dpi w zależności od tego, co obraz jest. Konwertuj na pożądaną rozdzielczość i format w GiMP lub Inkscape.

EDYCJA: Oczywiście dpi nie ma znaczenia, ponieważ .svg są grafiką wektorową i mają "nieskończoną rozdzielczość".

+0

DPI ma ogromne znaczenie, gdy używamy 'imshow (..)' gdzieś na rysunku. Mapy bitowe są rasteryzowane, ponieważ są osadzane w SVG. Przy domyślnej rozdzielczości DPI wyniki są nawet gorsze niż to, co widzimy na ekranie, zdecydowanie nieodpowiednie dla publikacji. –

0

Dobra, znalazłem spencerlyon2 pracuje odpowiedzi, jednak w przypadku ktokolwiek znalazłby sam nie wiedząc, co zrobić z tym jednym wierszu, musiałem zrobić to w ten sposób:

beingsaved = plt.figure() 

# some scatters 
plt.scatter(X_1_x, X_1_y) 
plt.scatter(X_2_x, X_2_y) 

beingsaved.savefig('destination_path.eps', format='eps', dpi=1000) 
Powiązane problemy