【问题标题】:Matplotlib while debugging in Pycharm: How to turn off interactive mode?在 Pycharm 中调试时使用 Matplotlib:如何关闭交互模式?
【发布时间】:2018-08-23 09:42:42
【问题描述】:

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

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
  • Anaconda 环境中的 Python 3.6.3

谁能重现这个?还有其他方法可以从 Pycharm 调试控制台创建更复杂的图表吗?每次我想绘制更复杂的东西时,我都不想改变我的开发环境。

【问题讨论】:

    标签: python macos matplotlib pycharm python-interactive


    【解决方案1】:

    回答您的问题:使用不同的(非交互式)后端:

    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()
    

    【讨论】:

    • 使用您建议的不同后端现在不会向我显示任何情节。与plt.plot(...)plt.plot(...)plt.show() 一起使用。从 bash 执行我的测试文件(没有 matplotlib.use('Agg'))按预期工作:它显示 plt.show() 之后的图,我什至可以使用 pdb 进行交互式绘图。
    • 这就是非交互式后端所做的,它不应该打开一个包含你的情节的窗口。在哪里可以通过切换图形和绘图调用来解决文本不显示的原始问题?
    • 文字现在可以使用了,谢谢!但是我想在 pycharm 的调试模式下绘制的主要问题,就像它在 pdb 的 bash 中工作一样,但没有解决。
    • 它仍然显示空数字?
    • @slashdottir 这是使用Anti-Grain Geometry engine的后端。有关后端的更多信息,read the docs
    猜你喜欢
    • 2018-07-04
    • 2019-05-30
    • 2013-10-20
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 2010-12-28
    • 2017-03-11
    • 2018-07-08
    相关资源
    最近更新 更多