savefig
의 옵션은 텍스트가없는 주석을 무시합니다. 다음은 예제 코드입니다.matplotlib : bbox_inches = 'tight'로 그림 저장 annotation을 무시합니다.
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_axes([0.2, 0.2, 0.6, 0.6])
arrow1 = ax.annotate('text', xy = [0.5,-0.2], xycoords = 'axes fraction', \
xytext = [-72,0], textcoords = 'offset points', \
arrowprops = dict(arrowstyle = '-|>', mutation_scale = 10.0, \
shrinkA = 0, shrinkB = 0, linewidth = 1))
arrow2 = ax.annotate('', xy = [0.5,1.2], xycoords = 'axes fraction', \
xytext = [-72,0], textcoords = 'offset points', \
arrowprops = dict(arrowstyle = '-|>', mutation_scale = 10.0, \
shrinkA = 0, shrinkB = 0, linewidth = 1))
fig.savefig('test.png')
fig.savefig('test-tight.png', bbox_inches = 'tight')
여기에 test.png
입니다. 두 개의 주석이 있음을 보여줍니다. 하나의 주석은 텍스트가 축 아래에 있고 하나의 주석이 텍스트가없고 축 위에 있습니다.
여기서 하나의 주석을 보여주는 test-tight.png
이다. 텍스트가없는 축 위에있는 주석은 무시되었습니다.
소스 코드에서 보면, artist.get_window_extent()
를 호출하여 예술가의 크기와 위치를 찾을 수 bbox_inches='tight'
시도. arrow1.get_window_extent()
을 시도하면 텍스트에 해당하는 경계 상자가 나타납니다. arrow2.get_window_extent()
을 시도하면 높이가 0이고 너비가 0 인 경계 상자가 나타납니다. 따라서 문제의 근원은 화살표가 포함되어 있지 않은 .get_window_extent()
입니다.
합리적인 방법으로이를 해결하는 방법에 대한 아이디어가 있으십니까? 어쨌든 전체 주석에 대해 적절한 테두리 상자를 얻을 수 있다면 비즈니스를 할 수 있습니다. 그러나, 나는 라인이나 패치 객체를 arrow2
밖으로 가져 오는 것조차 보이지 않습니다. 이 중요한 경우
, 나는하기 matplotlib 1.4.0 파이썬 2.7.6 및 Mac OS X 오전 10.8.5