熊猫情节怎么了?

Adi*_*tya 7 python plot matplotlib pandas

我正在关注Wes McKinney的一本书,在介绍大熊猫的部分中,他给出了一个绘制大熊猫数据框的简单例子.这是我写的行:

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)
Run Code Online (Sandbox Code Playgroud)

它只是在屏幕上打印一条线说

<matplotlib.axes.AxesSubplot object at 0x3d14ed0>
Run Code Online (Sandbox Code Playgroud)

而不是像matplotlib的绘图功能那样显示一个绘图窗口.这有什么不对?我怎样才能使它工作?

Joe*_*ton 14

除非您处于"交互式"模式,否则Matplotlib在您告知之前不会显示该情节.

简答:plt.show()当你准备好显示情节时打电话.

这启动了你正在使用的任何后端的gui主循环,所以它是阻塞的.(即执行将停止,直到你关闭窗口)

如果您希望它在不停止执行的情况下自动显示,您可以使用或使用启用交互模式.plt.ion()ipython --pylab


但是,--pylab在ipython中使用模式会将所有numpy,matplotlib.pyplot和其他一些内容导入全局命名空间.这是很方便的交互使用,但教得不好的习惯和标准库(如覆盖功能min,max等等).

您仍然可以在ipython中使用matplotlib的交互模式,而无需使用"pylab"模式来避免全局导入.打电话吧plt.ion()

Matplotlib的默认TkAgg后端将与任何python shell(不仅仅是ipython)在交互模式下工作.但是,如果没有gui mainloop在单独的线程中运行,其他后端无法避免阻止进一步执行.如果您使用的是不同的后端,那么您需要ipython使用该--gui=<backend>选项告诉它.

  • 我建议不要使用`pylab`模式; 将numpy的"any"和"all"导入范围是一个可怕的错误,因为它们的行为与内置行为有很大不同.幸运的是,这些天,`-pylab`已被弃用,并且使用`--matplotlib <backend>`并且鼓励手动导入`pylab`. (4认同)