2013-01-16 53 views
3

在matplotlib中顯示我的圖時,我還試圖將它保存爲使用不同維度的png。我正在複製我的主圖(print_fig = fig),然後更改print_fig大小(print_fig.set_size_inches(7,3))。然而,這適用於改變我原來的圖而不是隻是print_fig。有什麼辦法可以克隆圖形對象嗎?在matplotlib中調整大小以保存圖形

我的代碼看起來是這樣的:

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

回答

1

是保存在不同的分辨率爲PNG,你不需要調整這個數字。您可以使用savefig中的dpi關鍵字來控制圖片大小。

當您撥打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()

這樣,除非您對圖形進行了進一步更改,否則您將可以保存所需的尺寸,並且屏幕上的圖形將會不更新到這些維度。

+0

感謝您的回覆。我知道改變dpi,但它是我希望改變的高度/寬度的比率。你爲什麼認爲這是一項艱鉅的任務?實際上我難以理解的是爲什麼要改變print_fig,改變原始無花果的屬性。 – dimka

+0

當您執行'print_fig = fig'時,您不會複製任何內容,只需以另一個名稱(通過引用複製)調用'fig'即可。所以'print_fig'的任何改變都會改變原來的'fig'。我更新了答案,並提供了有關比例變化的更多信息。 – tiago

+0

怎麼能得到這個數字的真實副本?我在問,因爲我在一個PyQt4-GUI中使用了一個matplotlib-canvas,並且想要用不同的維度來保存這個圖形,而不是畫布圖形。但是,如果我改變尺寸,也是畫布圖形更新。所以我正在尋找與threadopener相同的東西。我試過copy.copy,但沒有成功。 – feinmann

0

這裏有一個想法:一些Matplotlib後端不顯示任何東西,如果我沒有記錯(如pdf後端),所以也許你可以switch to another backend,改變圖形的大小(不會顯示在屏幕上),並保存它(然後切換回原始後端)。

雖然我還沒有測試過這個想法,但後端切換仍然是實驗性的。但它可能值得一試。

相關問題