Um den Rahmen in der Abbildung zu entfernen, schreibe ich
frameon=False
funktioniert perfekt mit pyplot.figure
, entfernt aber matplotlib.Figure
nur den grauen Hintergrund, der Rahmen bleibt. Außerdem möchte ich nur, dass die Linien angezeigt werden und der Rest der Abbildung transparent ist.
mit pyplot kann ich machen was ich will, ich will es mit matplotlib machen aus einem langen grund, den ich lieber nicht erwähnen möchte, um meine frage zu erweitern.
python
matplotlib
Emmet B.
quelle
quelle
savefig
? (Wenn ja, wird alles überschrieben, was Sie beim Speichern der Abbildung festgelegt haben.) Funktioniert die manuelle Einstellungfig.patch.set_visible(False)
?Antworten:
Wenn Sie verwenden
savefig
, beachten Sie zunächst, dass die Hintergrundfarbe der Figur beim Speichern überschrieben wird, sofern Sie nichts anderes angeben (zfig.savefig('blah.png', transparent=True)
. B. ).Um jedoch den Hintergrund der Achsen und der Figur auf dem Bildschirm zu entfernen, müssen Sie beide festlegen
ax.patch
undfig.patch
unsichtbar sein.Z.B
(Natürlich kann man auf dem weißen Hintergrund von SO keinen Unterschied erkennen, aber alles ist transparent ...)
Wenn Sie nichts anderes als die Linie anzeigen möchten, schalten Sie die Achse ebenfalls aus, indem Sie
ax.axis('off')
:In diesem Fall möchten Sie möglicherweise, dass die Achsen die vollständige Zahl einnehmen. Wenn Sie die Position der Achsen manuell angeben, können Sie festlegen, dass die vollständige Abbildung übernommen werden soll (alternativ können Sie diese verwenden
subplots_adjust
, dies ist jedoch für den Fall einer einzelnen Achse einfacher).quelle
ax.axis('off')
Sie einfach (Sie müssen den Figurenrahmen auch noch ausschalten).ax.set_yticklabels(('G1', 'G2', 'G3'))
print_png()
löstTypeError: write() argument must be str, not bytes
bei Python 3 eine Ausnahme für mich aus. Das Öffnen der Datei als write binary ('wb'
) ist erforderlich, damit sie funktioniert.ax.axis('off')
, wird, wie Joe Kington betonte, alles außer der eingezeichneten Linie entfernen.Wenn Sie nur den Rahmen (Rand) entfernen und Beschriftungen, Ticker usw. beibehalten möchten, können Sie dies tun, indem Sie auf das
spines
Objekt auf der Achse zugreifen . Bei einem Achsenobjektax
sollte Folgendes die Ränder auf allen vier Seiten entfernen:Und im Falle des Entfernens
x
und dery
Zecken aus der Handlung:quelle
ax.yaxis.set_ticks_position('left') ax.xaxis.set_ticks_position('bottom')
Der einfachste Weg, den hässlichen Rahmen in neueren Versionen von matplotlib loszuwerden:
Wenn Sie wirklich immer den objektorientierten Ansatz verwenden müssen, dann tun Sie :
ax.set_frame_on(False)
.quelle
ax.set_frame_on(False)
, was dasselbe bewirkt. Vielleicht in die obige Antwort aufnehmen.Aufbauend auf der hervorragenden Antwort von @ peeol können Sie den Rahmen auch entfernen, indem Sie dies tun
Um ein Beispiel zu nennen (das gesamte Codebeispiel finden Sie am Ende dieses Beitrags), nehmen wir an, Sie haben ein Balkendiagramm wie dieses.
Sie können den Rahmen mit den obigen Befehlen entfernen und dann entweder die Beschriftungen
x-
undytick
(Plot nicht gezeigt) beibehalten oder sie auch entfernenIn diesem Fall kann man die Balken dann direkt beschriften; Die endgültige Darstellung könnte folgendermaßen aussehen (Code finden Sie unten):
Hier ist der gesamte Code, der zum Generieren der Diagramme erforderlich ist:
quelle
Wie ich hier geantwortet habe , können Sie über Stileinstellungen (Stylesheet oder rcParams) Stacheln aus all Ihren Plots entfernen:
quelle
Problem
Ich hatte ein ähnliches Problem mit Achsen. Der Klassenparameter ist
frameon
aber der kwarg istframe_on
. axes_api>>> plt.gca().set(frameon=False)
AttributeError: Unknown property frameon
Lösung
frame_on
Beispiel
quelle
Ich mache das immer so:
quelle
So entfernen Sie den Rahmen des Diagramms
Ich hoffe das könnte funktionieren
quelle
quelle
sollte den Trick machen.
quelle
plt.savefig hat diese Optionen für sich, muss nur vorher die Achsen auslösen
quelle