熊猫情节没有显示

Bas*_*asj 58 python matplotlib pandas

在脚本(而不是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()
Run Code Online (Sandbox Code Playgroud)

即使添加time.sleep(5),仍然没有.为什么?

有没有办法做到这一点,而无需手动调用matplotlib

tmd*_*son 112

一旦你完成了你的情节,你需要告诉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()
Run Code Online (Sandbox Code Playgroud)

既然你已经要求不这样做(为什么?),你可以使用以下[注意:这似乎不再适用于较新版本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()
Run Code Online (Sandbox Code Playgroud)

但是你在那里所做的就是找到一个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
Run Code Online (Sandbox Code Playgroud)

最后,您在注释链接示例不需要调用matplotlib的原因是因为它以交互方式运行iPython notebook,而不是在脚本中运行.

  • 谢谢。我认为 API 设计还可以更好。奇怪的是我们需要了解 matplotlib 才能使用 panda.plot (5认同)

Ham*_* MP 5

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

import matplotlib.pyplot as plt

%matplotlib inline
Run Code Online (Sandbox Code Playgroud)

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

fig, ax = plt.subplots(figsize=(16,9));
change_per_ins.plot(ax=ax, kind='hist')
Run Code Online (Sandbox Code Playgroud)

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