在Pycharm中调试时如何关闭Matplotlib的交互模式?

6

首先,我正在使用Pycharm调试控制台,并希望在我的图表下方添加标题。根据这个答案,可以通过以下方式实现:

plt.plot([2,5,1,2]
fig = plt.figure()
fig.text(.5, .05, "text", ha="center")
plt.show()

然而,这个代码首先展示了一个图表,接着是一个空白的窗口(在输入第二行后),而且之后没有其他输出。

我猜测这是因为matplotlib的交互模式,所以我在调试会话中使用plt.ioff()关闭了它,此时plt.isinteractive()返回False。但是仍然没有改变它的行为,它会在plt.plot(...)命令后立即显示图表。

奇怪的是,当我在脚本中加入plt.ioff()时,它被忽略了,plt.isinteractive()返回True

import matplotlib.pyplot as plt

plt.ioff()
plt.plot([1,2,3,4,5])
print(plt.isinteractive())

我的系统信息:

  • PyCharm CE 2017.3.2
  • macOS Sierra 10.12.6
  • Python 3.6.3 在 Anaconda 环境中

有人可以复现这个问题吗? 是否有其他方法从 Pycharm 调试控制台创建更复杂的图表? 我希望不必每次想要绘制更复杂的图表时都要更改我的开发环境。

1个回答

4
回答你的问题:使用不同的(非交互式)后端。
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt

您的代码可能无法正常工作,因为您在绘制图形之后创建了图形实例。请尝试:

fig = plt.figure()
plt.plot([2,5,1,2]
fig.text(.5, .05, "text", ha="center")
plt.show()

这就是非交互式后端所做的事情,它不应该打开一个窗口来显示你的图形。通过切换figure和plot调用,你能够解决原始问题了吗? - FlyingTeller
文本现在可以工作了,谢谢!但是我想在PyCharm的调试模式下绘图,就像在bash中使用pdb一样,这个问题还没有解决。 - PeterHeuz
它仍然显示空图形吗? - FlyingTeller
请问什么是“Agg”? - slashdottir
1
@slashdottir 是后端使用 Anti-Grain Geometry engine 引擎。有关后端的更多信息,请阅读文档 - FlyingTeller
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接