通过在matplotlib中调整大小来保存数字

时间:2013-01-16 05:59:56

标签: matplotlib clone image-resizing

在matplotlib中显示我的情节时,我也尝试将其保存为使用不同尺寸的png。我正在复制我的主要人物(print_fig = fig),然后更改print_fig大小(print_fig.set_size_inches(7,3))。然而,这适用于我原来的无花果而不仅仅是print_fig。有什么办法可以“克隆”一个数字对象吗?

我的代码看起来像这样:

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(10)

fig = plt.figure()
ax = plt.subplot(111)
ax.set_ylabel("y-label")

for i in xrange(5):
    ax.plot(x, i * x, label='$y = %ix$' % i)

ax.legend()
#change dimension of figure for print 
#clone fig displayed
print_fig = fig
print_fig.set_size_inches(7,3)
print_fig.savefig('print_fig.png')
plt.show()

这就是我的屏幕: enter image description here

2 个答案:

答案 0 :(得分:1)

如果你想要的是以不同的分辨率保存png,你不需要调整图形的大小。您可以使用dpi中的savefig关键字控制图片大小。

当您拨打savefig时,默认使用rc savefig.dpi(您可以在.matplotlibrc文件中查看它,通常为100)。因此,如果您想更改输出文件的分辨率,只需按照您想要的数量缩放dpi:

plt.savefig('myfig100.png', dpi=100)
plt.savefig('myfig50.png', dpi=50)

第二个将具有第一个的宽度和高度的一半。

如果你想改变宽度/高度的比例,那么当然这没有用。你正在做的是改变数字比例以保存的正确方法。但是如你所见,它会改变你的窗户。如果您没有在show()之后绘制任何其他内容,则可以执行以下操作:

  1. 进行密谋电话
  2. 致电show()
  3. fig.set_size_inches(7,3)
  4. 最后执行savefig()
  5. 这样,除非您对图形进行进一步更改,否则您将能够使用所需的尺寸进行保存,并且屏幕上的图形不会更新为这些尺寸。

答案 1 :(得分:0)

这是一个想法:一些Matplotlib后端不显示任何内容,如果我没记错(如pdf后端),那么也许你可以switch to another backend,改变数字大小(不会是显示在屏幕上),然后保存(然后切换回原始后端)。

但是,我还没有测试过这个想法,后端切换仍然是实验性的。但值得一试。