Fabuła Pand nie jest wyświetlana

81

Kiedy używasz tego w skrypcie (nie IPythonie), nic się nie dzieje, tj. Okno wykresu nie pojawia się:

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()

Nawet przy dodawaniu time.sleep(5)wciąż nic nie ma. Czemu?

Czy jest na to sposób, bez konieczności ręcznego wywoływania matplotlib ?

Basj
źródło
Czy otrzymujesz jakieś wyniki ts.plot()?
itzy
1
co masz na myśli "ręcznie wywołać matplotlib"? Zwykłym sposobem jest import matplotlib.pyplot as plt,plt.show()
maxymoo
1
@itzy: nic się nie dzieje, gdy ts.plot()program kończy się natychmiast po tym. Nawet jeśli time.sleep(10)nic nie dodam, jest wyświetlane
Basj
1
@maxymoo: Myślałem, że zrobienie .plot()na obiekcie pandy załatwi wszystko dla mnie (tj. pandy wykonują zadanie matplotlib zamiast mnie): zobacz ten przykład .
Basj

Odpowiedzi:

159

Po utworzeniu fabuły musisz powiedzieć jej matplotlib show. Zwykłym sposobem wykonywania czynności jest importowanie matplotlib.pyploti wywoływanie showz tego miejsca:

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()

Ponieważ nie chcesz tego robić (dlaczego?), Możesz użyć następującego [UWAGA: To już nie działa z nowszymi wersjami 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()

Ale wszystko, co tam robisz, to znajdowanie miejsca, które matplotlibzostało zaimportowane pandasi wywoływanie tej samej showfunkcji z tego miejsca.

Czy próbujesz uniknąć dzwonienia matplotlib, aby przyspieszyć działanie? Jeśli tak, to naprawdę niczego nie przyspieszasz, ponieważ pandasjuż importuje 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

Wreszcie, powodem, dla którego przykład, do którego utworzyłeś link w komentarzach, nie jest potrzebne wywołanie, matplotlibjest to, że jest uruchamiany interaktywnie w iPython notebookskrypcie, a nie w skrypcie.

tmdavison
źródło
Kiedy uruchamiam 'pd.tseries.plotting.pylab.show ()' dostaję „padnas.tseries” nie ma żadnego wykresu atrybutów, czy jest nieaktualny? Napisałeś to w 2015 roku ..
Sebastian Nielsen
Tak, wygląda na to, że nie ma już tylnych drzwi do matplotlib. I tak nadal polecam pierwszą opcję
tmdavison
2
Dzięki. Myślę, że projekt API mógłby być lepszy. To dziwne, że musimy wiedzieć o matplotlib, aby używać panda.plot
Phil
5

Jeśli używasz matplotlib,i nadal, rzeczy nie pojawiają się w notatniku iPython (lub też w Jupyter Lab), pamiętaj, aby ustawić opcję inline dla matplotlibw notatniku.

import matplotlib.pyplot as plt

%matplotlib inline

Wtedy poniższy kod będzie działał bez zarzutu:

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

Jeśli nie ustawisz opcji inline, nie pojawi się, a dodając plt.show()na końcu otrzymasz zduplikowane wyniki.

Hamed MP
źródło
0

Właśnie zrobiłem

import matplotlib.pyplot as plt

%matplotlib inline

i dodaj linię

plt.show()

obok df.plot () i działało dobrze dla

devSpartan
źródło
1
Uwzględnij środowisko, którego używasz, aby móc wstawiać %matplotlib inline(nie jest to standardowy Python, którego można użyć w skrypcie).
Basj
%matplotlib inlinejest używany w notebooku ipython / jupyter ...
Yatin
Tak, nie ma potrzeby dodawania% matplotlib inline, jeśli używasz IDE, takiego jak pycharm (używałem go).
devSpartan
0

Inne odpowiedzi obejmują matplotlib.pyplotręczne importowanie i / lub wywoływanie drugiej funkcji.

Zamiast tego można skonfigurować matplotlib, aby być w trybie interaktywnym z jego plikami konfiguracyjnymi .

Po prostu dodaj linię

interactive: True

do pliku o nazwie matplotlibrcw jednym z następujących miejsc:

  • W bieżącym katalogu roboczym
  • W katalogu użytkownika specyficznym dla platformy określonym przez matplotlib.get_configdir()
    • Zwykle w systemie uniksopodobnym /home/username/.config/matplotlib/
    • W systemie Windows C:\\Documents and Settings\\username\\.matplotlib\\
borsuk
źródło