在脚本(不是 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?
一旦你完成了你的绘图,你需要告诉 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
中,您能够找到 matplotlib 的后门,如下例所示。 注意:这在现代版本的 pandas
中不再有效,我仍然建议单独导入 matplotlib,如上面的示例所示。
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
中交互运行,而不是在脚本中。
如果您使用
matplotlib,
但仍然没有在 iPython 笔记本(或 Jupyter Lab)中显示内容,请记住在笔记本中为 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()
您将获得重复的输出。
我刚刚做了
import matplotlib.pyplot as plt
%matplotlib inline
并添加行
plt.show()
在 df.plot() 旁边,效果很好
其他答案涉及导入
matplotlib.pyplot
和/或手动调用第二个函数。
相反,您可以使用其
配置文件将
matplotlib
配置为交互模式。
只需添加行
interactive: True
到位于以下位置之一的名为
matplotlibrc
的文件:
matplotlib.get_configdir()
指定的平台特定用户目录中
/home/username/.config/matplotlib/
C:\\Documents and Settings\\username\\.matplotlib\\
您可以通过将参数作为内联传递给 %matplotlib magic 命令来更改 Matplotlib 后端
内联后端在 Jupyter Notebooks 中很受欢迎,因为它在笔记本本身中显示绘图,紧邻创建绘图的单元格下方:
%matplotlib inline