【问题标题】:Saving Matplotlib graphs to image as full screen将 Matplotlib 图形保存为全屏图像
【发布时间】:2015-12-02 09:23:12
【问题描述】:

我正在使用 Pandas 和 MatPlotLib 构建一个小型绘图实用程序,以解析数据并从工作中的机器输出图形。

当我使用

输出图表时
plt.show()

我最终得到一个模糊的图像,其中有传说和标签,像这样相互排挤。

但是,将窗口扩展到全屏解决了我的问题,重新定位所有内容以使图表可见。

然后我将图表保存为 .png 格式

plt.savefig('sampleFileName.png')

但是当它保存到图像时,不会保存全屏的正确版本的绘图,而是保存错误的默认版本。

如何将绘图的全屏 plt.show() 保存为 .png?

我希望我不会太困惑。

感谢您的帮助!

【问题讨论】:

  • 你能分享MCVE吗?或所有代码,如果可能的话。
  • 我认为在这种情况下不会有太大帮助。对不起,我在混淆。我希望 savefig 保存我发布的图片在 plt.show() 全屏时的样子。一种可能的解决方案可能是更改 plt.show() 的窗口大小。我怎么能这样做?

标签: python pandas numpy matplotlib data-visualization


【解决方案1】:

作为另一种选择,我认为它也值得研究

plt.savefig('filename.png', bbox_inches='tight')

如果您正在做的subplots 的轴标签看起来很杂乱,这将特别有用。

【讨论】:

    【解决方案2】:

    对于那些在上述答案中收到错误的人,这对我有用。

    #Show full screen
    mng = plt.get_current_fig_manager()
    mng.full_screen_toggle()
    

    完整示例

    fig = plt.figure()
    fig.imshow(image)
    ...
    plt.figure(fig.number)
    mng = plt.get_current_fig_manager()
    mng.full_screen_toggle()
    fig.show()
    fig.savefig('figure.png')
    mng.full_screen_toggle()
    

    【讨论】:

      【解决方案3】:

      我找到了最常见的答案on this website。这是所有这些答案的破烂。 似乎可以在所有情况下使用而不会出现兼容性问题。

      如果您对此答案有任何疑问,请随时发表评论。

      # Maximise the plotting window
      plot_backend = matplotlib.get_backend()
      mng = plt.get_current_fig_manager()
      if plot_backend == 'TkAgg':
          mng.resize(*mng.window.maxsize())
      elif plot_backend == 'wxAgg':
          mng.frame.Maximize(True)
      elif plot_backend == 'Qt4Agg':
          mng.window.showMaximized()
      

      【讨论】:

        【解决方案4】:

        对于使用上述解决方案未能全屏保存情节的每个人来说,这对我来说真正有用:

            figure = plt.gcf()  # get current figure
            figure.set_size_inches(32, 18) # set figure's size manually to your full screen (32x18)
            plt.savefig('filename.png', bbox_inches='tight') # bbox_inches removes extra white spaces
        

        您可能还想使用 dpi(以每英寸点数为单位的分辨率)

            plt.savefig('filename.png', bbox_inches='tight', dpi=100)
        

        【讨论】:

        • 如果您在 MacOS 10.15.7 上使用 Python 3.7,这是上面唯一可行的解​​决方案 :)
        【解决方案5】:

        您用来最大化窗口大小的方法取决于您使用的 matplotlib 后端。请参阅以下 3 个最常见后端的示例:

        import matplotlib.pyplot as plt
        
        plt.figure()
        plt.plot([1,2], [1,2])
        
        # Option 1
        # QT backend
        manager = plt.get_current_fig_manager()
        manager.window.showMaximized()
        
        # Option 2
        # TkAgg backend
        manager = plt.get_current_fig_manager()
        manager.resize(*manager.window.maxsize())
        
        # Option 3
        # WX backend
        manager = plt.get_current_fig_manager()
        manager.frame.Maximize(True)
        
        plt.show()
        plt.savefig('sampleFileName.png')
        

        您可以使用命令matplotlib.get_backend() 确定您正在使用哪个后端。当您保存图形的最大化版本时,它将根据需要保存更大的图像。

        【讨论】:

        • QT,显然!像魅力一样工作! :) 非常感谢,我的朋友。
        • 有什么办法可以将剧情最大化到大于全屏?
        • 不太清楚为什么你想让你的情节比全屏更大。您可以设置 x-lim 和 y-lim 以放大绘图的某个部分。将您的代码调整为plt.show()plt.tight_layout()plt.savefig('sampleFileName.png'),以使绘图占用更多的最大化窗口。
        • 我正在使用 TkAgg 后端,此解决方案以最大化视图显示绘图,但将其保存为默认大小。你能帮忙吗?
        • 你也可以关注plt.savefig('figname.png', bbox_inches='tight')
        猜你喜欢
        • 1970-01-01
        • 2018-06-06
        • 2011-08-02
        • 1970-01-01
        • 2022-12-13
        • 2019-12-10
        • 2020-07-09
        • 1970-01-01
        • 2021-10-14
        相关资源
        最近更新 更多