1

我目前有如下代码:

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)

我怎样才能直接将这个数字保存到磁盘而不先在屏幕上渲染它?(请注意,我希望该图保留我传递给的三个参数中指定的属性imshow

4

2 回答 2

2

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

import matplotlib
matplotlib.use('Agg')

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

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

于 2012-11-27T00:49:07.597 回答
2

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

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

backend      : Agg

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

ipython --pylab=qt
于 2012-11-27T00:49:28.497 回答