it-swarm.com.de

Speichern von Bildern in python mit einer sehr hohen Qualität

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.

87
dustin

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.

128
spencerlyon2

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.

52
grofte

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)
4
Jonatán Iván

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.)

3
Leevo