Name der aktuellen figure abfragen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
ytm81524
User
Beiträge: 12
Registriert: Mittwoch 15. Januar 2020, 03:38

Hallo,

kann man irgendwie den Namen der aktuellen Figure abfragen? Ich möchte in folgendem Codein der letzten Zeile, bei der Namensgebung das "f2_"+... ersetzen, indem ich es abfrage.

Code: Alles auswählen

import matplotlib.pyplot as plt
import time
import numpy as np
timestr = time.strftime("%Y%m%d-%H%M%S")

x = -50 + np.random.random((2500,1))*100
y = x**2

f2=plt.figure()
plt.scatter(x, y, s = 1)
plt.title('test')
plt.xlabel('x')
plt.ylabel('y')
plt.show()
f2.savefig("f2_"+timestr+".pdf", bbox_inches='tight')
Kirikkayis
User
Beiträge: 85
Registriert: Freitag 18. Januar 2019, 08:02

Hey,

versuch es mal wie folgt

Code: Alles auswählen

plt.gcf()
bzw.

Code: Alles auswählen

plt.gcf().number
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

@ytm81524: was meinst Du mit Namen? Den Titel?

Code: Alles auswählen

import matplotlib.pyplot as plt
from datetime import datetime as DateTime
import numpy as np

x = -50 + np.random.random((2500,1))*100
y = x**2
fig, ax = plt.subplots()
ax.scatter(x, y, s = 1)
ax.set_title('test')
ax.xlabel('x')
ax.ylabel('y')
fig.show()
fig.savefig(f"{ax.get_title()}_{DateTime.now():%Y%m%d-%H%M%S}.pdf", bbox_inches='tight')
ytm81524
User
Beiträge: 12
Registriert: Mittwoch 15. Januar 2020, 03:38

@ Kirikkayis
Mit ersterem kann ich einen figure.Figure Typ erzeugen, mit dem zweiten ein int mit dem Inhalt 1.

@ Sirius3
Meine Frage war schlecht formuliert, es geht mir nich um den Namen im Sinne des Titels sondern am Anfang erzeuge ich die leere figure mit f2=plt.figure(). Dieses "f2" möchte ich nun hinterher wieder abfragen und zum Abspeichern als Namesteil mitverwenden.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Verstehe ich nicht. Du hast doch (die sagenhaft schlecht benannte) Variable f2. Was hindert dich daran dir zu benutzen?
ytm81524
User
Beiträge: 12
Registriert: Mittwoch 15. Januar 2020, 03:38

Ja das war grundsätzlich auch meine Idee. Ich weiß nur noch nicht wie das funktioniert. Wie rufe ich den "Namen" der Figure, das f2 denn wieder ab?
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Gibt es auch ein f1 und ein f3? Das Durchnunmerieren von Variablen deutet darauf hin, dass man eine Datenstruktur verwenden möchte.

Wie __deets__ schon schrieb: der Variablenname ist eh schon schlecht. Eigentlich sollte der "figure" lauten.
Und wenn du die Datei "fig2" nennen willst, dann tu das dort, wo du sie speicherst.

Was willst du den wirklich erreichen? Ich vermute, du denkst mit dem Benennnen einer Datei nach dem Namen einer Variable löst du ein Problen. Da bist du auf dem Holzweg. Wenn du uns das Problem nennst, sagen wir dir, wie es eigentlich gelöst wird.
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Gar nicht. Kannst du mal beschreiben was du eigentlich erreichen willst? Wer legt den Namen fest? Warum ist das nicht einfach ein String?

Code: Alles auswählen

figure_name = "f2"
fig.savefig(f"{figure_name}_{DateTime.now():%Y%m%d-%H%M%S}.pdf", bbox_inches='tight')
ytm81524
User
Beiträge: 12
Registriert: Mittwoch 15. Januar 2020, 03:38

In der folgenden Zeile kommt das f2 eben zweimal vor. Einmal zu Beginn, um klarzustellen das figure f2 abgespeichert werden soll und danach nochmal in der Namensgebung der Datei. Die Idee war, diese Dopplung zu vermeiden, indem bei der Namensgebung das f2, welches am Anfang der Zeile eingegeben wurde, irgendwie abgefragt wird.

Code: Alles auswählen

f2.savefig("f2_"+timestr+".pdf", bbox_inches='tight')
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das geht nicht. Jedenfalls nicht für eine sinnvolle Definition von “geht nicht”.

Du kannst Objekte in einem Wörterbuch speichern. Da kannst du dann den Schlüssel benutzen.
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

@ytm81524: Ich verstehe übrigens noch immer nicht, warum im Dateinamen der Variablenname enthalten sein muss.
Wenn du wirklich Dopplung vermeiden willst, kapsel das ganze in einer Funktion. Bisher scheint das nämlich alles sehr statisch und unflexibel. Dann ist der Name der Variable eh egal.
Antworten