Pandas Handlung wird nicht angezeigt

80

Wenn Sie dies in einem Skript (nicht IPython) verwenden, geschieht nichts, dh das Plotfenster wird nicht angezeigt:

import numpy as np
import pandas as pd
ts = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000))
ts.plot()

Auch beim Hinzufügen time.sleep(5)gibt es noch nichts. Warum?

Gibt es eine Möglichkeit, dies zu tun, ohne matplotlib manuell aufrufen zu müssen ?

Basj
quelle
Erhalten Sie eine Ausgabe von ts.plot()?
itzy
1
Was meinst du mit "manuell Matplotlib aufrufen"? der übliche Weg ist import matplotlib.pyplot as plt,plt.show()
maxymoo
1
@itzy: nichts passiert wenn ts.plot()das programm sofort danach beendet wird. Auch wenn ich time.sleep(10)nichts hinzufüge, wird nichts angezeigt
Basj
1
@maxymoo: Ich dachte, dass das Ausführen .plot()eines Panda-Objekts alles für mich erledigen würde (dh Pandas erledigt den Matplotlib-Job anstelle von mir): siehe dieses Beispiel .
Basj

Antworten:

155

Sobald Sie Ihre Handlung gemacht haben, müssen Sie matplotlib dazu informieren show. Die übliche Vorgehensweise besteht darin matplotlib.pyplot, showvon dort aus zu importieren und aufzurufen :

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
ts = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000))
ts.plot()
plt.show()

Da Sie darum gebeten haben, dies nicht zu tun (warum?), Können Sie Folgendes verwenden [HINWEIS: Dies scheint mit neueren Versionen von nicht mehr zu funktionieren pandas]:

import numpy as np
import pandas as pd
ts = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000))
ts.plot()
pd.tseries.plotting.pylab.show()

Aber alles, was Sie dort tun, ist, einen Ort zu finden, matplotlibin den importiert wurde pandas, und showvon dort aus dieselbe Funktion aufzurufen .

Versuchen Sie zu vermeiden, dass Sie anrufen, um die matplotlibDinge zu beschleunigen? Wenn ja, dann beschleunigen Sie wirklich nichts, da pandasbereits importiert pyplot:

python -mtimeit -s 'import pandas as pd'
100000000 loops, best of 3: 0.0122 usec per loop

python -mtimeit -s 'import pandas as pd; import matplotlib.pyplot as plt'
100000000 loops, best of 3: 0.0125 usec per loop

Der Grund, warum das Beispiel, das Sie in Kommentaren verlinkt haben, nicht aufgerufen werden muss, matplotlibist, dass es interaktiv iPython notebookin einem Skript und nicht in einem Skript ausgeführt wird.

tmdavison
quelle
Wenn ich 'pd.tseries.plotting.pylab.show ()' ausführe, erhalte ich, dass "padnas.tseries 'kein Attributplotten hat, ist es veraltet? Das haben Sie 2015 geschrieben.
Sebastian Nielsen
Ja, es sieht so aus, als ob die Hintertür zu matplotlib nicht mehr da ist. Ich empfehle trotzdem die erste Option
tmdavison
2
Vielen Dank. Ich denke, das API-Design könnte besser sein. Es ist seltsam, dass wir etwas über matplotlib wissen müssen, um panda.plot zu verwenden
Phil
5

matplotlib,Wenn Sie und immer noch Dinge verwenden, die im iPython-Notizbuch (oder auch in Jupyter Lab) nicht angezeigt werden, müssen Sie die Inline-Option für matplotlibim Notizbuch festlegen .

import matplotlib.pyplot as plt

%matplotlib inline

Dann funktioniert der folgende Code einwandfrei:

fig, ax = plt.subplots(figsize=(16,9));
change_per_ins.plot(ax=ax, kind='hist')

Wenn Sie die Inline-Option nicht festlegen, wird sie nicht angezeigt. Wenn Sie plt.show()am Ende ein hinzufügen, erhalten Sie doppelte Ausgaben.

Hamed MP
quelle
0

Ich habe es gerade getan

import matplotlib.pyplot as plt

%matplotlib inline

und Zeile hinzufügen

plt.show()

neben df.plot () und es hat gut funktioniert für

devSpartan
quelle
1
Bitte geben Sie an, welche Umgebung Sie zum Einfügen verwenden möchten %matplotlib inline(dies ist kein Standard-Python, das in einem Skript verwendet werden kann).
Basj
%matplotlib inlinewird in ipython / jupyter notebook verwendet ...
Yatin
Ja, es ist nicht erforderlich,% matplotlib inline hinzuzufügen, wenn Sie eine IDE wie pycharm verwenden (ich habe sie verwendet).
devSpartan
0

Die anderen Antworten beinhalten das matplotlib.pyplotmanuelle Importieren und / oder Aufrufen einer zweiten Funktion.

Stattdessen können Sie konfigurieren , matplotlibum in seine interaktiven Modus mit seinen Konfigurationsdateien .

Fügen Sie einfach die Zeile hinzu

interactive: True

zu einer Datei, die matplotlibrcan einer der folgenden Stellen aufgerufen wird :

  • Im aktuellen Arbeitsverzeichnis
  • Im plattformspezifischen Benutzerverzeichnis von matplotlib.get_configdir()
    • Normalerweise auf einem Unix-ähnlichen System /home/username/.config/matplotlib/
    • Unter Windows C:\\Documents and Settings\\username\\.matplotlib\\
Dachs
quelle