2014-01-09 4 views
2

matplotlib 그림에서 축 레이블 텍스트와 정렬되도록 몇 가지 추가 주석을 배치하려고합니다. 이 위치는 틱 및 축 레이블의 글꼴 크기와 주석의 글꼴 크기의 함수로 어떻게 계산됩니까?matplotlib에서 축 레이블 텍스트의 위쪽 위치는 무엇입니까?

초래도 지점에서의 수직 위치 y 무엇 폰트 각각 tick_font_sizelabel_font_size 크기와 눈금 라벨의 단일 세트의 x 축을 따라 단일 축 레이블 도면 주어진 구체적

,

ax.annotate('Some text', (x, y), va='top', ...) 

글꼴 제목이 annotation_font_size 인 축 레이블 'Some text'을 축 레이블과 수직으로 배치합니까?


나는 이것에 대한 annotate를 사용해야합니다 여러 가지 이유를 들어

, 그리고 va='top' 제약 조건이다; 나는 위의 글꼴 크기 정보를 사용합니다 - 즉, 내가 형태로 그림 포인트의 모든 값 (annotate에서 textcoords='offset points'으로 즉, 사용 가능)와

y = f(tick_font_size, label_font_size, annotation_font_size) 

의 기능을 찾고 있어요. 이러한 알고리즘은 반드시 축 레이블을 첫 번째 위치에 배치하기 위해 matplotlib에 의해 사용되기 때문에 존재해야합니다.

+0

'top'은 (는) – M4rtini

+0

@ M4rtini에 대한 유효한 옵션이 아닙니다. 감사; 결정된. – orome

답변

1

xlabel을 설정할 때 반환되는 개체를 가져옵니다. 그림을 렌더링하고 get_position을 사용하여 레이블의 위치를 ​​가져옵니다. 여기에서 일부 변형을 수행하고 주석을 추가하십시오.

import numpy as np 
import matplotlib.pyplot as plt 

x = np.arange(10) 
y = x**2 

xlabel = plt.xlabel("test") 
plt.plot(x, y) 

ax = plt.gca() 
fig = plt.gcf() 
fig.draw(fig.canvas.get_renderer()) 

trans = xlabel.get_transform() 
xpos, ypos = trans.transform(xlabel.get_position()) # convert to display coordinates 
xpos, ypos = fig.transFigure.inverted().transform([xpos, ypos]) # convert to figure coordinates 
ax.annotate('Some text', (xpos+0.05, ypos), xycoords='figure fraction', va="top") 
plt.show() 
+0

축과 레이블이 이미 설정된 'ax'가 있다고 가정합니다. 'xlabel '을 어떻게 얻습니까? – orome

+0

ax.get_xaxis(). get_label() – M4rtini

+0

도움이 되긴하지만 내가 찾고있는 것은 아닙니다. 필요한 것은'ax','tick_font_size','label_font_size' 및'annotation_font_size'를 annotation을 축 레이블과 정렬시키는'y' 값으로 매핑하는 함수입니다. (그 함수는 'matplotlib'에 의해 축 레이블을 위치시키기 위해 사용되기 때문에 존재합니다.) – orome