Jeśli używasz matplotlibi próbujesz uzyskać dobre wyniki w dokumencie lateksowym, zapisz jako eps. W szczególności spróbuj czegoś takiego po uruchomieniu poleceń, aby wykreślić obraz:
plt.savefig('destination_path.eps', format='eps')
Zauważyłem, że pliki eps działają najlepiej, a dpiparametr jest tym, co naprawdę sprawia, że wyglądają dobrze w dokumencie.
AKTUALIZACJA:
Aby określić orientację figury przed zapisaniem, po prostu wywołaj następujące polecenie przed plt.savefigwywołaniem, ale po utworzeniu wykresu (zakładając, że narysowałeś za pomocą osi z nazwą ax):
Gdzie elevation_anglejest liczbą (w stopniach) określającą kąt biegunowy (w dół od pionowej osi z), a azimuthal_angleokreślającą kąt azymutalny (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, jak bieżące wartości kątów pojawiają się w dolnej części okna tuż pod faktycznym wykresem. Pamiętaj, że pozycje x, y, z pojawiają się domyślnie, ale są zastępowane dwoma kątami, gdy zaczniesz klikać + przeciąganie + obracanie obrazu.
@ spencerlon2 co jeśli chcę zmienić orientację figury przed zapisaniem?
dustin
13
Dlaczego potrzebujemy parametru DPI? Czy eps nie jest formatem wektorowym?
mkvoya
1
Dobra uwaga - DPI nie jest potrzebne do formatów wektorowych, takich jak svg, pdf, eps
spencerlyon2
Możesz pominąć, format='eps'jeśli chcesz. W tym przypadku format jest wywnioskowany z nazwy pliku.
timgeb
72
Aby dodać moje wyniki, również używając matplotlib.
.eps pogrubił cały mój tekst i usunął przezroczystość. .svg dał mi zdjęcia w wysokiej rozdzielczości, które faktycznie 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 obrazów w rozdzielczości 1200/600/300 dpi w zależności od tego, czego one dotyczą. Konwertuj do żądanej rozdzielczości i formatu w GiMP lub Inkscape.
EDYCJA: Oczywiście dpi nie ma znaczenia, ponieważ .svg są grafiką wektorową i mają „nieskończoną rozdzielczość”.
DPI ma duże znaczenie, gdy używamy go imshow(..)gdzieś na rysunku. Te mapy bitowe są rasteryzowane w dół, gdy są osadzane w pliku SVG. Przy domyślnym DPI wyniki są jeszcze gorsze niż to, co widzimy na ekranie, zdecydowanie nie nadające się do publikacji.
Evgeni Sergeev
Bardzo polecam również narzędzie Scour ( github.com/scour-project/scour ), aby zmniejszyć rozmiar pliku svg. Przy najbardziej agresywnym ustawieniu mogę zmniejszyć rozmiar mojego pliku do 50% oryginału - 5%, jeśli używam skompresowanego formatu .svgz.
grofte
8
Okay, odpowiedź spencerlyon2 działa, jednak gdyby ktoś nie wiedział, co zrobić z tą linią, musiałem to zrobić w ten sposób:
W przypadku, gdy pracujesz z działkami morskimi , zamiast matplotlib możesz zapisać obraz .png w następujący sposób:
Załóżmy, że masz matrixobiekt (pandy lub numpy) i chcesz wziąć mapę cieplną:
import seaborn as sb
image = sb.heatmap(matrix)# this gets you the heatmap
image.figure.savefig("C:/Your/Path/ ... /your_image.png")# this saves it
Ten kod jest zgodny z najnowszą wersją gatunku Seaaborn. Inne kody dotyczące stackoverflow działały tylko dla poprzednich wersji.
Innym sposobem, który mi się podoba, jest to. Rozmiar kolejnego obrazu ustawiam następująco:
plt.subplots(figsize=(15,15))
A potem wykreślam wynik w konsoli, z której mogę je skopiować i wkleić, gdzie chcę. (Ponieważ poroże morskie jest zbudowane na bazie matplotlib, nie będzie problemu).
Możesz zapisać do postaci 1920 × 1080 (lub 1080p) za pomocą:
fig = plt.figure(figsize=(19.20,10.80))
Możesz także iść znacznie wyżej lub niżej. Powyższe rozwiązania sprawdzają się dobrze w przypadku drukowania, ale obecnie chcesz, aby utworzony obraz trafił do formatu PNG / JPG lub pojawił się w formacie szerokiego ekranu.
format='eps'
jeśli chcesz. W tym przypadku format jest wywnioskowany z nazwy pliku.Aby dodać moje wyniki, również używając matplotlib.
.eps pogrubił cały mój tekst i usunął przezroczystość. .svg dał mi zdjęcia w wysokiej rozdzielczości, które faktycznie wyglądały jak mój wykres.
Użyłem 1200 dpi, ponieważ wiele czasopism naukowych wymaga obrazów w rozdzielczości 1200/600/300 dpi w zależności od tego, czego one dotyczą. Konwertuj do żądanej rozdzielczości i formatu w GiMP lub Inkscape.
EDYCJA: Oczywiście dpi nie ma znaczenia, ponieważ .svg są grafiką wektorową i mają „nieskończoną rozdzielczość”.
źródło
imshow(..)
gdzieś na rysunku. Te mapy bitowe są rasteryzowane w dół, gdy są osadzane w pliku SVG. Przy domyślnym DPI wyniki są jeszcze gorsze niż to, co widzimy na ekranie, zdecydowanie nie nadające się do publikacji.Okay, odpowiedź spencerlyon2 działa, jednak gdyby ktoś nie wiedział, co zrobić z tą linią, musiałem to zrobić w ten sposób:
źródło
W przypadku, gdy pracujesz z działkami morskimi , zamiast matplotlib możesz zapisać obraz .png w następujący sposób:
Załóżmy, że masz
matrix
obiekt (pandy lub numpy) i chcesz wziąć mapę cieplną:Ten kod jest zgodny z najnowszą wersją gatunku Seaaborn. Inne kody dotyczące stackoverflow działały tylko dla poprzednich wersji.
Innym sposobem, który mi się podoba, jest to. Rozmiar kolejnego obrazu ustawiam następująco:
A potem wykreślam wynik w konsoli, z której mogę je skopiować i wkleić, gdzie chcę. (Ponieważ poroże morskie jest zbudowane na bazie matplotlib, nie będzie problemu).
źródło
Możesz zapisać do postaci 1920 × 1080 (lub 1080p) za pomocą:
Możesz także iść znacznie wyżej lub niżej. Powyższe rozwiązania sprawdzają się dobrze w przypadku drukowania, ale obecnie chcesz, aby utworzony obraz trafił do formatu PNG / JPG lub pojawił się w formacie szerokiego ekranu.
źródło