2014-09-03 48 views
0

通常,如果使用pyplot中的默認設置繪製兩個不同的圖形,它們將具有完全相同的大小,並且如果保存的可以整齊排列在PowerPoint或類似內容中。我想生成一個數字,但是,在圖中有一個圖例。我使用的腳本如下所示。使用另一個圖中的剪輯框保存圖形

import numpy as np 
import matplotlib.pyplot as plt 

x=np.linspace(0,1,201) 
y1=x**2 
y2=np.sin(x) 

fig1=plt.figure(1) 
plt.plot(x,y1,label='y1') 
handles1,labels1=plt.gca().get_legend_handles_labels() 
lgd1=plt.gca().legend(handles1,labels1,bbox_to_anchor=(1.27,1),borderaxespad=0.) 

fig2=plt.figure(2) 
plt.plot(x,y2) 

fig1.savefig('fig1',bbox_extra_artists=(lgd1,),bbox_inches='tight') 
fig2.savefig('fig2') 

plt.show() 

問題是,在PowerPoint中,我不能再對齊左側的兩個圖,並讓它們的軸對齊。由於第一個數字使用了「額外藝術家」和「bbox_inches = tight」參數,因此其邊距寬度與第二個數字不同。

是否有任何方法將剪輯框從第一個圖轉移到第二個圖,以便可以通過PowerPoint中的「對齊左對齊」對齊它們?

回答

1

我認爲一個更簡單的方法來實現你想要的只是構造一個帶有兩個子圖的圖,並讓matplotlib對齊你的一切。

你認爲做這樣的事情是個好主意嗎?

import matplotlib.pyplot as plt 
import numpy as np 

x=np.linspace(0,1,201) 
y1=x**2 
y2=np.sin(x) 

fig = plt.figure() 

a = fig.add_subplot(211) 

a.plot(x,y1, label='y1') 

lgd1 = a.legend(bbox_to_anchor = (1.27,1), borderaxespad=0.) 

a = fig.add_subplot(212) 
a.plot(x,y2) 

fig.savefig('fig',bbox_extra_artists=(lgd1,),bbox_inches='tight') 
+0

謝謝約翰;我曾想過以這種方式解決問題,但我希望能夠使用單獨的數字。我在Matplotlib文檔中看到了諸如「_get_clip_box」和「_set_clip_box」等屬性(但沒有示例或詳細描述),所以我認爲它應該是可能的。 – 2014-09-04 15:00:34

相關問題