Ich stoße auf ein seltsames Problem mit Matplotlib. Hier ist mein Code:pylab: unterschiedliches Verhalten in Shell und Skript
f,a=subplots(3,1,sharex='col')
f.set_figheight(3.)
f.set_figwidth(3.)
## Make plots, set labels for a[0], a[1], a[2]
a[2].set_xlim(-4.40,6)
[plt.setp(i.get_xticklabels(),fontsize=9) for i in a]
[plt.setp(i.get_yticklabels(),fontsize=9) for i in a]
[i.set_yscale('log') for i in a]
[i.set_ylim(1e-4,1.) for i in a]
for i in a:
##The following part is problematic
labels=[j.get_text() for j in i.get_yticklabels()]
## end problematic part
print labels
labels[1] = u''; i.set_yticklabels(labels)
f.subplots_adjust(hspace=0)
plt.show()
Das Problem ist, dass ein Teil der für die Schleife, die yticklabels funktioniert gut bekommt, wenn ich es in der Shell ausgeführt, nachdem die Handlung zu machen, aber es gibt eine leere Liste, wenn ich es als Teil des Laufes über Skript.
Wenn ich den Code innerhalb ipython laufen mit:
#Code run inside IPython shell
run -i 'myscript.py'
bekomme ich folgende Ausgabe:
['', '', '', '', '', '', '']
['', '', '', '', '', '', '']
['', '', '', '', '', '', '']
Das ist nicht das, was ich will. Allerdings, wenn ich das Etikett Änderung im Skript Kommentar aus und führen Sie die folgenden Schritte aus:
# Code run inside IPython shell
run -i 'myscript.py'
for i in a:
labels=[j.get_text() for j in i.get_yticklabels()]
print labels
labels[1] = u''; i.set_yticklabels(labels)
ich folgende Ausgabe:
['', '$\\mathdefault{10^{-4}}$', '$\\mathdefault{10^{-3}}$', '$\\mathdefault{10^{-2}}$', '$\\mathdefault{10^{-1}}$', '$\\mathdefault{10^{0}}$', '']
['', '$\\mathdefault{10^{-4}}$', '$\\mathdefault{10^{-3}}$', '$\\mathdefault{10^{-2}}$', '$\\mathdefault{10^{-1}}$', '$\\mathdefault{10^{0}}$', '']
['', '$\\mathdefault{10^{-4}}$', '$\\mathdefault{10^{-3}}$', '$\\mathdefault{10^{-2}}$', '$\\mathdefault{10^{-1}}$', '$\\mathdefault{10^{0}}$', '']
, die die Ausgabe ich erwarte. Ich habe keine Ahnung, was hier passieren könnte. Jede Hilfe wird sehr geschätzt. Gibt es auch eine "pythonische" Art, die for-Schleife zu schreiben? Eigentlich
Dank
Könnten Sie erklären, was "run" ist, dass Sie verwenden? Soll das "ipython -i" sein? – NichtJens
Ich führe das Skript interaktiv innerhalb der IPython-Shell auf diese Weise: ---- In [1]: run -i 'myscript.py' – toylas
Ich sehe. Haben Sie versucht, es über den Standardinterpreter auszuführen? Ich denke, das wird das gleiche Ergebnis erzeugen, aber dann würdest du wissen, dass es nicht ipython war, komische Dinge zu tun ... – NichtJens