BEARBEITEN
Geändert aspect='normal
zu aspect='auto'
seitdem geändert in neueren Versionen von matplotlib (danke an @ Luke19).
Angenommen:
import matplotlib.pyplot as plt
So machen Sie eine Figur ohne Rahmen:
fig = plt.figure(frameon=False)
fig.set_size_inches(w,h)
Damit der Inhalt die ganze Figur ausfüllt
ax = plt.Axes(fig, [0., 0., 1., 1.])
ax.set_axis_off()
fig.add_axes(ax)
Dann zeichnen Sie Ihr Bild darauf:
ax.imshow(your_image, aspect='auto')
fig.savefig(fname, dpi)
Der aspect
Parameter ändert die Pixelgröße, um sicherzustellen, dass sie die in angegebene Größengröße ausfüllt fig.set_size_inches(…)
. Um ein Gefühl dafür zu bekommen, wie man mit solchen Dingen spielt, lesen Sie die Dokumentation von matplotlib , insbesondere zum Thema Axes , Axis und Artist.
w
undh
infig.set_size_inches(w,h)
und dendpi
Parameter manuell so einstellenfig.savefig(fname, dpi)
, dass sie 24 x 24 Pixel groß sind, sollte dies einwandfrei funktionieren. Zum Beispielw = h = 1
unddpi = 24
imshow
die Syntax vonaspect='auto'
anstelle von geändert wurde'normal'
).ax = plt.Axes(fig, [0., 0., 1., 1.])
ist es, was es funktioniert.Eine einfachere Lösung scheint zu sein:
quelle
fig.savefig('out.png', bbox_inches='tight',transparent=True, pad_inches=0)
Sie können die bbox des Bildes innerhalb der Achse finden (mit
get_window_extent
) und denbbox_inches
Parameter verwenden, um nur den Teil des Bildes zu speichern:Diesen Trick habe ich hier von Joe Kington gelernt .
quelle
plt.axis('off')
geholfen. Andere Antworten helfen nicht viel.plt.savefig('/temp/test.png', bbox_inches='tight', transparent=True, pad_inches=0)
stattplt.savefig('/tmp/test.png', bbox_inches=extent)
Ich habe in meinem Fall mehrere Optionen ausprobiert, und die beste Lösung war folgende:
dann speichere deine Figur mit
savefig
quelle
Ich werde eine Antwort von heron13 mit einem kleinen Zusatz vorschlagen, der von hier entlehnt wurde , um die Polsterung zu entfernen, die nach dem Einstellen der bbox in den engen Modus übrig bleibt.
quelle
Dieser arbeitet für mich
quelle
Ich hatte das gleiche Problem bei der Visualisierung mit librosa, bei der ich den Inhalt der Handlung ohne weitere Informationen extrahieren wollte. Das ist also mein Ansatz. unutbu Antwort hilft mir auch, zur Arbeit zu bringen.
quelle
extent.get_points()*np.array([[1.1],[.9]])
.Für alle, die dies in Jupyter versuchen
quelle
Während die obigen Antworten das Entfernen von Rändern und Auffüllen betreffen, haben sie beim Entfernen von Etiketten bei mir nicht funktioniert. Folgendes hat funktioniert, für alle, die später auf diese Frage stoßen:
Angenommen, Sie möchten ein 2x2-Raster mit Nebenhandlungen aus vier Bildern, die in
images
folgenden Dateien gespeichert sind :quelle
Ich habe auch versucht, die Grenze loszuwerden, indem ich hier Tipps verwendet habe, aber nichts hat wirklich funktioniert. Ein bisschen herumgespielt und ich fand, dass das Ändern der Gesichtsfarbe mir in Jupyter-Labors keinen Rand gab (jede Farbe führte dazu, dass der weiße Rand entfernt wurde). Hoffe das hilft.
quelle
Eigentlich habe ich das kürzlich versucht und anstelle all dieser Zeilen können Sie verwenden
Klappt wunderbar. nur eine Zeile und Problem gelöst.
Dokumentation ( https://matplotlib.org/3.1.1/api/_as_gen/matplotlib.pyplot.imsave.html )
quelle
Für mich hat dieser Code die Größe des Eingabebildes ohne Rahmen und Achsen aus den Codes matehat , unutbu und WHZW ähnlich gemacht :
Laufzeitumgebung:
Python 3.6.10
Matplotlib 3.2.1
OS Windows 10
quelle