为什么文本以交互方式显示

时间:2015-01-31 02:17:38

标签: python matplotlib

来自Is there a way of drawing a caption box in matplotlib

from matplotlib import pyplot as plt
import numpy as np

x = np.arange(0,3,.25)
y = np.sin(x)
txt = '''
    Lorem ipsum dolor sit amet, consectetur adipisicing elit,
    sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
    Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris
    nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in
    reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
    pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
    culpa qui officia deserunt mollit anim id est laborum.'''

fig = plt.figure()
ax1 = fig.add_axes((.1,.4,.8,.5))
ax1.bar(x,y,.2)
fig.text(.1,.1,txt) #<-doesn't work interactively
#plt.show()

如果我将其作为脚本运行,则此代码有效。但是,如果我首先运行所有内容,但不包括fig.text行,那么我将fig.text行输入到控制台中,txt没有显示在图中!为什么呢?

2 个答案:

答案 0 :(得分:2)

这是一个功能,而不是一个bug。

重绘图形的计算成本非常高,因此OO界面不会强制重新绘制图形。通过延迟绘制的费用,您可以极大地提高函数的性能,这些函数可以调用FigureAxes方法。要使屏幕上的数字更新以反映您需要显式更新它的状态。您通过

以编程强制重新绘制
fig.canvas.draw()

plt.draw()

将重新绘制当前数字&#39;。调整窗口大小将导致GUI框架重新绘制窗口,从而触发完全重新绘制mpl figur。

当您使用pyplot函数(而不是OO接口)时,会在每个绘图命令上强制重绘。这种差异是因为pyplot接口与状态机(跟踪当前图形/轴)相结合,并且设计用于交互式使用,其中作为OO接口(pyplot接口构建在顶部) of)专为程序化使用而设计。

这是开发人员意识到的烦恼,并使这个行为更直观地在近/中期路线图上(参见https://github.com/matplotlib/matplotlib/pull/3587及其中的链接)。

答案 1 :(得分:-1)

在matplotlib中的交互模式下阅读this information。默认情况下,您需要在matplotlibrc文件中启用它,通过matplotlib.interactive()设置,或者通过运行plt.ion()在您的控制台中打开,这是我在此推荐的。但从长远来看,使用自定义matplotlibrc文件是最好的选择。