【问题标题】:What's wrong with Pandas plot?熊猫情节有什么问题?
【发布时间】:2013-09-18 20:15:47
【问题描述】:

我正在关注 Wes McKinney 的一本书,在介绍 pandas 的部分中,他给出了一个绘制 pandas 数据框的简单示例。这是我写的几行:

tz_counts = frame['tz'].value_counts() # frame is a Data Frame
tz_counts[:10] # works fine till here. I can see the key-value I wanted
tz_counts[:10].plot(kind='barh', rot=0)

它只是在屏幕上打印一行,上面写着

<matplotlib.axes.AxesSubplot object at 0x3d14ed0>

而不是像我期望的那样使用 matplotlib 的绘图功能显示绘图窗口。这里有什么问题?我怎样才能让它发挥作用?

【问题讨论】:

  • 你是如何开始 IPython 的?你跑ipython --pylab了吗?如果您刚刚做了ipython,那么您将得到您所报告的内容。
  • 即使它无关紧要,如果您安装了 qtconsole,我建议运行“ipython qtconsole --pylab inline”。我个人觉得这样更合适。
  • 我不知道“便携”是一个词。
  • @PhillipCloud 这只是一个错字,我的意思是舒适。

标签: python matplotlib plot pandas


【解决方案1】:

除非您处于“交互”模式,否则 Matplotlib 不会显示绘图,除非您处于“交互”模式。

简答:当您准备好显示该图时,请致电plt.show()。

这会启动您正在使用的任何后端的 gui 主循环,因此它是阻塞的。 (即执行将停止,直到您关闭窗口)

如果您希望它在不停止执行的情况下自动显示,您可以使用plt.ion() 或使用ipython --pylab 打开interactive mode。


但是,在 ipython 中使用 --pylab 模式会将所有 numpy、matplotlib.pyplot 和其他一些内容导入到全局命名空间中。这便于交互使用,但会教人很坏的习惯并覆盖标准库中的函数(例如min、max 等)。

你仍然可以在 ipython 中使用 matplotlib 的交互模式而不使用“pylab”模式来避免全局导入。只需拨打plt.ion()

Matplotlib 的默认 TkAgg 后端将在交互模式下与任何 python shell(不仅仅是ipython)一起工作。但是,如果没有在单独的线程中运行 gui 主循环,其他后端无法避免阻止进一步的执行。如果您使用不同的后端,则需要使用 --gui=&lt;backend&gt; 选项告诉 ipython。

【讨论】:

  • 你刚刚打败了我。我写的是同样的答案。但可能应该是 --pylab
  • @PhillipCloud - 我很幸运,看到了发布的问题:)
  • @rafee - 很好,谢谢。顺便说一句,-pylab 和 --pylab 都可以与较新版本的 ipython 一起使用。不过,-- 更加一致。
  • 我不建议使用pylab 模式进行任何操作;将 numpy 的 any 和 all 导入作用域是一个可怕的错误,因为它们的行为与内置函数如此不同。幸运的是,这些天来,-pylab 已被弃用,鼓励使用 --matplotlib &lt;backend&gt; 并手动导入 pylab。
【解决方案2】:

尝试使用:

%matplotlib 
tz_counts = frame['tz'].value_counts()
tz_counts[:10].plot(kind='barh', rot=0)

使用 % matplotlib 可以防止从 pylab 和 numpy 导入 *,从而防止变量破坏。

【讨论】:

    猜你喜欢
    • 2020-06-16
    • 2017-04-12
    • 2020-01-11
    • 2015-05-29
    • 2016-03-24
    • 2021-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多