熊猫图未显示


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 pltplt.show()
maxymoo 2015年

1
@itzy:当时ts.plot(),什么也没有发生,程序在此之后立即终止。即使我time.sleep(10)没有添加任何内容,也没有显示
2015年

1
@maxymoo:我认为.plot()对panda对象执行操作将为我处理所有事情(即pandas代替我执行matplotlib的工作):请参见此示例
Basj 2015年

Answers:


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 '18

2
谢谢。我认为API设计可能会更好。我们需要了解有关使用panda.plot的matplotlib的信息,这很奇怪
Phil,

5

万一您matplotlib,仍在使用,并且仍然无法在iPython笔记本(或Jupyter Lab)中显示任何内容,请记住matplotlib在笔记本中设置inline选项。

import matplotlib.pyplot as plt

%matplotlib inline

然后,以下代码将完美运行:

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

如果您未设置内联选项,则不会显示该选项,plt.show()最后添加a将获得重复的输出。


0

我刚刚

import matplotlib.pyplot as plt

%matplotlib inline

并添加行

plt.show()

在df.plot()旁边,效果很好


1
请包括您可以插入哪个环境%matplotlib inline(这不是可在脚本中使用的标准Python)。
巴斯基

%matplotlib inline在ipython / jupyter笔记本中使用...
Yatin

是的,如果您正在使用像pycharm这样的IDE,则无需内联添加%matplotlib(我一直在使用它)。
devSpartan

0

其他答案包括matplotlib.pyplot手动导入和/或调用某些第二功能。

相反,您可以使用其配置文件配置matplotlib为处于交互模式

只需添加行

interactive: True

matplotlibrc在以下位置之一调用的文件:

  • 在当前工作目录中
  • 在平台指定的用户目录中,由 matplotlib.get_configdir()
    • 在类似Unix的系统上,通常 /home/username/.config/matplotlib/
    • 在Windows上 C:\\Documents and Settings\\username\\.matplotlib\\
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.