我目前的代码如下:
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}})
答案 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