4

在 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()

这是我的屏幕的样子: 在此处输入图像描述

4

2 回答 2

1

如果您想要以不同的分辨率保存 png,则无需调整图形大小。您可以使用dpi关键字 in控制图像大小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()

这样,除非您对图形进行进一步更改,否则您将能够保存所需的尺寸,并且屏幕上的图形不会更新为这些尺寸。

于 2013-01-16T07:56:32.483 回答
0

这是一个想法:如果我没记错的话,一些 Matplotlib 后端不显示任何内容(比如pdf后端),所以也许你可以切换到另一个后端,更改图形大小(不会显示在屏幕上),然后保存它(然后切换回原来的后端)。

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

于 2015-06-06T00:24:45.190 回答