2014-09-03 3 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"와 같은 속성을 보았으므로 가능해야한다고 생각합니다. –

관련 문제