我正在关注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)
它只是在屏幕上打印一行
<matplotlib.axes.AxesSubplot object at 0x3d14ed0>
而不是像matplotlib的绘图功能那样显示一个绘图窗口。这有什么不对?我怎样才能使它发挥作用?
答案 0 :(得分:14)
简短回答:当您准备好显示情节时,请致电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 mainloop,其他后端无法避免阻止进一步执行。如果您使用的是其他后端,则需要使用ipython
选项告知--gui=<backend>
。
答案 1 :(得分:1)
尝试使用:
%matplotlib
tz_counts = frame['tz'].value_counts()
tz_counts[:10].plot(kind='barh', rot=0)
使用%matplotlib可防止从pylab和numpy导入*,从而防止变量破坏。