2014-10-12 9 views
2

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입니다. 두 개의 주석이 있음을 보여줍니다. 하나의 주석은 텍스트가 축 아래에 있고 하나의 주석이 텍스트가없고 축 위에 있습니다.

enter image description here

여기서 하나의 주석을 보여주는 test-tight.png이다. 텍스트가없는 축 위에있는 주석은 무시되었습니다.

enter image description here

소스 코드에서 보면, 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

답변

0

실제로이 버그는 2014 년에 issue 3816으로보고되었으며 matplotlib v1.4.3에서 수정되었습니다. 이 결과를 일찍 게시하지 않으셔서 죄송합니다.

0

어쩌면 당신은 당신의 주석 명령에 다음 인수를 추가하여 경계 상자를 만드는 시도 할 수 있습니다 : bbox=dict(facecolor='none', edgecolor='none', pad=1.0) 또는 공백이나 흰색 문자를 추가하면 경계 상자가 자동으로 만들어 지는지 확인하십시오.

관련 문제