Сюжет з пандами не відображається


81

При використанні цього в скрипті (не IPython) нічого не відбувається, тобто вікно сюжету не з'являється:

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

Навіть при додаванні time.sleep(5)все одно нічого немає. Чому?

Чи є спосіб це зробити без необхідності вручну викликати matplotlib ?


Чи отримуєте ви якісь результати від ts.plot()?
itzy

1
що ви маєте на увазі "виклик matplotlib вручну"? звичайний спосіб import matplotlib.pyplot as plt,plt.show()
maxymoo

1
@itzy: нічого не відбувається, коли ts.plot()програма припиняється відразу після цього. Навіть якщо я додаю, time.sleep(10)нічого не відображається
Basj

1
@maxymoo: Я думав, що виконуючи дії .plot()на об'єкті panda, я впораюся з усім (тобто pandas виконує роботу matplotlib замість мене): див. цей приклад .
Basj

Відповіді:


159

Після того, як ви склали свою змову, вам потрібно повідомити matplotlib про showце. Звичайний спосіб робити це імпортувати matplotlib.pyplotта дзвонити showзвідти:

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

Оскільки ви просили цього не робити (чому?), Ви можете скористатися наступним [ПРИМІТКА. Здається, це більше не працює з новішими версіями 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()

Але все, що ви там робите, - це знайти десь matplotlibімпортоване pandasта викликати ту саму showфункцію звідти.

Ви намагаєтеся уникати дзвінків matplotlib, намагаючись пришвидшити справу? Якщо так, то ви насправді нічого не пришвидшуєте, оскільки pandasвже імпортуєте 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

Нарешті, причина, за якою приклад, який ви зв’язали в коментарях , не потребує виклику, matplotlibполягає в тому, що він запускається інтерактивно в iPython notebookсценарії, а не в сценарії.


? Коли я біжу 'pd.tseries.plotting.pylab.show () я отримую «padnas.tseries' не має атрибута змови, як він застарів Ви зробили запис , що в 2015 році ..
Себастьян Нільсен

Так, схоже, що задніх дверей до matplotlib вже немає. Я все-таки рекомендую перший варіант
tmdavison

2
Дякую. Я думаю, що дизайн API може бути кращим. Дивно, що ми повинні знати про matplotlib, щоб використовувати panda.plot
Філ

5

Якщо ви використовуєте matplotlib,і все одно, речі не відображаються в блокноті iPython (або також лабораторії Юпітера), не забудьте встановити вбудований параметр для matplotlibблокнота.

import matplotlib.pyplot as plt

%matplotlib inline

Тоді наступний код буде працювати бездоганно:

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

Якщо ви не встановите вбудований параметр, він не відображатиметься, і, додавши plt.show()в кінці, ви отримаєте повторювані результати.


0

Я просто зробив

import matplotlib.pyplot as plt

%matplotlib inline

і додати рядок

plt.show()

поруч із df.plot (), і він добре працював для


1
Вкажіть, яке середовище ви використовуєте, щоб мати можливість вставити %matplotlib inline(це не стандартний Python, який можна використовувати в сценарії).
Бас

%matplotlib inlineвикористовується у блокноті ipython / jupyter ...
Ятін,

Так, немає необхідності додавати% matplotlib вбудовано, якщо ви використовуєте IDE на зразок pycharm (я використовував його).
devSpartan

0

Інші відповіді стосуються імпорту matplotlib.pyplot та / або виклик якоїсь другої функції вручну.

Замість цього, ви можете налаштувати , matplotlibщоб бути в інтерактивному режимі з його файлами .

Просто додайте рядок

interactive: True

до файлу, викликаного matplotlibrcв одному з таких місць:

  • У поточному робочому каталозі
  • У конкретному користувацькому каталозі платформи, вказаному matplotlib.get_configdir()
    • Зазвичай в Unix-подібній системі /home/username/.config/matplotlib/
    • У Windows C:\\Documents and Settings\\username\\.matplotlib\\
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.