【问题标题】:Disable/skip show()禁用/跳过显示()
【发布时间】:2013-05-21 15:10:47
【问题描述】:

我正在编写一个脚本来从数据中生成多个图,每个图首先以plt.savefig() 保存,然后以plt.show() 显示。 在第一阶段,我希望显示所有图并为每个图停止脚本,以允许调整例如轴范围、比例、标签。

在第二阶段,当我在 LaTex 中包含这些图并完成布局时,我希望所有图都保存为 pdf,而在我重新执行脚本进行最终编辑时不会弹出它们。

我可以在我的脚本中预先设置一个简单的命令来禁用plt.show(),这样脚本就可以在第二阶段在后台运行吗?

我知道我可以使用plt.ion() 使plt.show() 成为非阻塞的,但这会不断弹出窗口,使我的注意力从我的乳胶编辑器窗口中移开(我在 Ubuntu 上)。

【问题讨论】:

    标签: python matplotlib plot


    【解决方案1】:

    您问的问题并不完全正确,但要理解答案,您需要对matplotlib 的架构有所了解。 pyplot 是一个基于状态机的层,可与 ipython 一起使用,以模仿 MATLAB 类似的体验。这是建立在OO 接口之上的(你真的应该将它用于脚本,而不是pyplot,但我离题了)。 OO 层知道如何绘制到 canvas 以及如何转换数据 -> 抽象漂亮的线条。 canvas 由多种后端之一提供,这些后端知道如何将抽象的漂亮线条转换成实际的漂亮线条。默认情况下,您可能正在使用 GTKAgg 后端或 TKAgg 后端,它们将线条绘制到嵌入在 gui 中的画布上,并且都是交互式后端。

    您只需要第二次使用非交互式后端即可。

    在您的脚本中包括:

    import matplotlib
    matplotlib.use('PDF')
    

    在导入 pyplot 之前,并在需要交互式图形时注释掉该行。

    【讨论】:

    • 谢谢,这行得通!而且我对 matplotlib 的结构有一个不错的了解,但没有弄清楚这一点。
    • 我使用plt.tight_layout(),这给出了一个小警告:tight_layout : falling back to Agg renderer。但是情节看起来一样,所以我可以忽略它。
    猜你喜欢
    • 2018-11-03
    • 2015-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多