【问题标题】:Directly saving a figure to disk without rendering first on the screen无需先在屏幕上渲染,直接将图形保存到磁盘
【发布时间】:2012-11-27 00:40:57
【问题描述】:

我目前有如下代码:

import os
import numpy as np
import pylab 

import matplotlib.pyplot as plt
import matplotlib.cm as cm    
from matplotlib.patches import Polygon  
import numpy as np

...

# Read my image
img = matplotlib.image.imread(p_image)

# Render it, move the coordinates' origin to the upper left corner
plt.imshow(np.flipud(img), cmap=cm.Greys_r,origin='upper')

# Overlay a polygon
p = Polygon( zip(xs,ys), alpha=0.2)
plt.gca().add_artist(p)

# Save it to disk
plt.savefig(p_image_output)

如何直接将该图保存到磁盘而不先在屏幕上渲染?(请注意,我希望该图保留我传递给@987654322 的三个参数中指定的属性@)

【问题讨论】:

    标签: python matplotlib figure


    【解决方案1】:

    除非您使用ipython --pylab,否则只有在您使用show()draw() 时,该数字才会出现在屏幕上。如果您不希望它显示在屏幕上,请确保您没有进行任何这些调用。

    或者,您可以在 matplotlib 中使用非交互式后端。例如,Agg 后端。只需确保您在 ~/.matplotlib/matplotlibrc 文件中设置了以下内容:

    backend      : Agg
    

    请记住,使用此后端您将永远不会在屏幕上看到任何内容。如果您使用ipython,您可以保留配置文件并通过使用特定后端调用--pylab 来拥有交互式后端。例如:

    ipython --pylab=qt
    

    【讨论】:

      【解决方案2】:

      一种方法是将matplotlib 后端设置为没有交互支持的东西。一种标准方法是在您开始使用或从 matplotlib 的其他部分导入之前插入以下行:

      import matplotlib
      matplotlib.use('Agg')
      

      标准后端是TkAgg,它使用带有 Tk 交互式事件循环的“agg”(“反颗粒几何”)渲染。使用Agg 进行相同类型的图形渲染,但不会在屏幕上显示任何内容。

      请注意,一旦您更改后端,matplotlib 可能无法将其切换回来。因此,如果您知道不想在此脚本的屏幕上绘制任何内容,则此方法效果最佳。

      【讨论】:

        猜你喜欢
        • 2022-12-11
        • 1970-01-01
        • 2020-03-18
        • 1970-01-01
        • 2022-10-19
        • 2019-07-20
        • 1970-01-01
        • 1970-01-01
        • 2011-12-09
        相关资源
        最近更新 更多