Сюжет панд не отображается


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 08

2
Благодарю. Думаю, дизайн API мог бы быть лучше. Странно, что нам нужно знать о matplotlib, чтобы использовать panda.plot
Фил

5

Если вы используете matplotlib,и по-прежнему ничего не отображается в блокноте iPython (или в Jupyter Lab), не забудьте установить параметр inline для 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, который можно использовать в скрипте).
Basj

%matplotlib inlineиспользуется в блокноте ipython / jupyter ...
Ятин

Да, нет необходимости добавлять% matplotlib inline, если вы используете 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.