2016-08-01 34 views
0

Im CodeUnterschied zwischen zeilen_einlesen() -Methode von Achsen und Legende

from matplotlib.figure import Figure 

fig1 = Figure() 
ax1 = fig1.add_subplot(111) 
p1 = ax1.plot([1,2,3], label='123') 
lg1 = ax1.legend() 

lg1.get_lines()[0] == ax1.get_lines()[0] falsch ergibt, auch wenn sie auf die gleiche Linie beziehen sollte. Darf ich wissen, warum das so ist?

+2

Willkommen bei Stackoverflow. Sie sollten weitere Details hinzufügen und einen Basiscode hinzufügen. Lesen Sie bitte [Wie stelle ich eine gute Frage?] (Http://stackoverflow.com/help/how-to-ask) und [Wie erstelle ich ein minimales, vollständiges und überprüfbares Beispiel] (http://stackoverflow.com)/help/mcve) –

+0

Ich löste, was ich ursprünglich tun wollte, also änderte ich die Frage zu dem Teil, den ich noch nicht herausfinden kann – Sam

Antwort

0

Die kurze Antwort ist, dass sie verschiedene Instanzen von Objekten im Speicher sind.

In [6]: lg1.get_lines() 
Out[6]: [<matplotlib.lines.Line2D at 0x10e355828>] 

In [7]: ax1.get_lines() 
Out[7]: <a list of 1 Line2D objects> 

In [8]: list(ax1.get_lines()) 
Out[8]: [<matplotlib.lines.Line2D at 0x10e342940>] 

Beachten Sie, dass die ID-Werte unterschiedlich sind, daher sind sie nicht wirklich „gleich“, auch wenn sie in der Handlung auf das gleiche Objekt „beziehen“ kann.

In [9]: lg1.get_lines()[0] 
Out[9]: <matplotlib.lines.Line2D at 0x10e355828> 

In [10]: ax1.get_lines()[0] 
Out[10]: <matplotlib.lines.Line2D at 0x10e342940> 
In [11]: id(lg1.get_lines()[0]) 
Out[11]: 4533344296 

In [12]: id(ax1.get_lines()[0]) 
Out[12]: 4533266752 

Oder vielmehr gibt ax1.get_lines() die Zeile, die aufgetragen wird und lg1.get_lines() gibt die tatsächlichen in der Legende Feld gezogenen Linien

+0

Danke für die Antwort! Ich habe gerade festgestellt, dass 'ax1.get_lines()' die geplottete Linie gibt und 'lg1.get_lines()' die tatsächlichen Linien, die im Legendenfeld gezeichnet sind. Sie sind also völlig verschiedene Objekte. – Sam