繁体   English   中英

直接将图形保存到磁盘,而无需先在屏幕上渲染

[英]Directly saving a figure to disk without rendering first on the screen

我目前有如下代码:

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的三个参数中指定的属性)

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

import matplotlib
matplotlib.use('Agg')

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

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

除非您使用ipython --pylab ,否则只有在执行show()draw() ,图形才应出现在屏幕上。 如果您不希望它显示在屏幕上,只需确保您没有进行任何这些呼叫即可。

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

backend      : Agg

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

ipython --pylab=qt

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM