【问题标题】:Pandas plot doesn't show熊猫情节不显示
【发布时间】:2016-03-24 15:54:07
【问题描述】:

在脚本(不是 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()得到任何输出吗?
  • “手动调用 matplotlib”是什么意思?通常的方式是import matplotlib.pyplot as plt,plt.show()
  • @itzy :当ts.plot() 时没有任何反应,程序在此之后立即终止。即使我添加time.sleep(10) 也不会显示任何内容
  • @maxymoo :我认为在 panda 对象上执行 .plot() 将为我处理所有事情(即 pandas 完成 matplotlib 工作,而不是我):参见 this example。

标签: python pandas matplotlib


【解决方案1】:

一旦你完成了你的情节,你需要告诉 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

最后,example you linked in comments 不需要调用matplotlib 的原因是它在iPython notebook 中交互运行,而不是在脚本中。

【讨论】:

  • 当我运行“pd.tseries.plotting.pylab.show()”时,我得到“padnas.tseries”没有属性绘图,它已经过时了吗?你确实在 2015 年写过......跨度>
  • 是的,看起来 matplotlib 的后门已经不存在了。无论如何,我仍然推荐第一个选项
  • 谢谢。我认为 API 设计可能会更好。奇怪的是,我们需要了解 matplotlib 才能使用 panda.plot
【解决方案2】:

如果您使用的是 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')

如果您不设置 inline 选项,它将不会显示,并且在最后添加 plt.show() 您将获得重复的输出。

【讨论】:

    【解决方案3】:

    我刚刚做了

    import matplotlib.pyplot as plt
    
    %matplotlib inline
    

    并添加一行

    plt.show()
    

    在 df.plot() 旁边,它适用于

    【讨论】:

    • 请包括您使用哪个环境能够插入%matplotlib inline(这不是可以在脚本中使用的标准Python)。
    • %matplotlib inline 用于 ipython/jupyter notebook...
    • 是的,如果你使用的是像pycharm这样的IDE(我一直在使用它),则不需要添加%matplotlib inline。
    【解决方案4】:

    其他答案涉及导入 matplotlib.pyplot 和/或手动调用第二个函数。

    相反,您可以将matplotlib 配置为interactive mode 及其configuration files。

    只需添加一行

    interactive: True

    到以下位置之一的名为 matplotlibrc 的文件:

    • 在当前工作目录中
    • 在matplotlib.get_configdir()指定的平台特定用户目录中
      • 在类 unix 系统上,通常是 /home/username/.config/matplotlib/
      • 在 Windows C:\\Documents and Settings\\username\\.matplotlib\\

    【讨论】:

      猜你喜欢
      • 2017-04-12
      • 2020-06-16
      • 2021-11-25
      • 2016-11-15
      • 2020-09-20
      • 2018-09-06
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多