Wie kann ich python plots in sehr hoher Qualität speichern?
Das heißt, wenn ich das in einer PDF-Datei gespeicherte Objekt immer wieder vergrößere, tritt keine Unschärfe auf?
Was wäre der beste Modus, um es zu speichern?
png
, eps
? Oder eine andere? Ich kann pdf
nicht ausführen, da es eine versteckte Zahl gibt, die mit der Latexmk
-Zusammenstellung durcheinander kommt.
Wenn Sie matplotlib
verwenden und versuchen, gute Zahlen in einem Latexdokument zu erhalten, speichern Sie es als Eps. Versuchen Sie Folgendes, nachdem Sie die Befehle ausgeführt haben, um das Bild zu zeichnen:
plt.savefig('destination_path.eps', format='eps')
Ich habe festgestellt, dass EPS-Dateien am besten funktionieren und der Parameter dpi
bewirkt, dass sie in einem Dokument wirklich gut aussehen.
AKTUALISIEREN:
Um die Ausrichtung der Figur vor dem Speichern festzulegen, rufen Sie einfach Folgendes vor dem Aufruf von plt.savefig
Auf, aber nach dem Erstellen des Diagramms (vorausgesetzt, Sie haben mit einer Achse mit dem Namen ax
geplottet):
ax.view_init(elev=elevation_angle, azim=azimuthal_angle)
Wobei elevation_angle
Eine Zahl (in Grad) ist, die den Polarwinkel (abwärts von der vertikalen z-Achse) angibt, und azimuthal_angle
Den Azimutwinkel (um die z-Achse) angibt.
Ich finde, dass es am einfachsten ist, diese Werte zu bestimmen, indem zuerst das Bild geplottet und dann gedreht wird und die aktuellen Werte der Winkel am unteren Rand des Fensters direkt unter dem eigentlichen Plot angezeigt werden. Beachten Sie, dass die Positionen x, y, z standardmäßig angezeigt werden, jedoch durch die beiden Winkel ersetzt werden, wenn Sie mit dem Klicken, Ziehen und Drehen des Bildes beginnen.
Nur um meine Ergebnisse zu addieren, auch mit matplotlib.
.eps machte meinen gesamten Text fett und entfernte die Transparenz. .svg gab mir hochauflösende Bilder, die tatsächlich wie meine Grafik aussahen.
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
# Do the plot code
fig.savefig('myimage.svg', format='svg', dpi=1200)
Ich habe 1200 dpi verwendet, weil in vielen wissenschaftlichen Zeitschriften Bilder mit 1200/600/300 dpi erforderlich sind, je nachdem, von welchem Bild sie stammen. Konvertieren Sie in die gewünschte Auflösung und formatieren Sie sie in GiMP oder Inkscape.
BEARBEITEN: Offensichtlich spielt die dpi keine Rolle, da .svg Vektorgrafiken sind und "unendliche Auflösung" haben.
Okay, ich fand, dass die Antwort von spencerlyon2 funktioniert, aber falls jemand nicht weiß, was er mit dieser einen Zeile machen soll, musste ich es so machen:
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)
Wenn Sie mit seaborn Plots arbeiten, können Sie anstelle von matplotlib ein PNG-Bild wie folgt speichern:
Angenommen, Sie haben ein matrix
-Objekt (entweder pandas oder numpy)) und möchten eine Heatmap erstellen:
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
Dieser Code ist mit der neuesten Version von seaborn kompatibel. Andere Codes für den Stapelüberlauf funktionierten nur für frühere Versionen.
Ein anderer Weg, den ich mag, ist dieser. Ich stelle die Größe des nächsten Bildes wie folgt ein:
plt.subplots(figsize=(15,15))
Und später zeichne ich die Ausgabe in der Konsole, von der ich sie kopieren und einfügen kann, wo ich will. (Da Seaborn auf Matplotlib gebaut ist, wird es kein Problem geben.)