直接将数字保存到磁盘而不先在屏幕上呈现

时间:2012-11-27 00:40:57

标签: python matplotlib figure

我目前的代码如下:

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)

如何直接将此图保存到磁盘而不先在屏幕上呈现?(注意我希望图中保留我传递给{{的三个参数中指定的属性1}})

2 个答案:

答案 0 :(得分:2)

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

import matplotlib
matplotlib.use('Agg')

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

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

答案 1 :(得分:2)

除非您使用的是ipython --pylab,否则如果您执行show()draw(),该图应仅显示在屏幕上。如果您不希望它显示在屏幕上,请确保您没有进行任何这些呼叫。

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

backend      : Agg

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

ipython --pylab=qt