matplotlib 플롯의 왼쪽 상단 모서리에 텍스트 넣기


112

matplotlib 그림의 왼쪽 상단 (또는 오른쪽 상단) 구석에 텍스트를 넣으려면 어떻게해야합니까? 예를 들어 그것이 plt.scatter ()라면, 스 캐터의 정사각형 안에있는 무언가는 가장 왼쪽 상단 모서리에 놓이게됩니다.

예를 들어 데이터 세트에서 데이터 세트로 변경 될 것이기 때문에 플롯되는 산점도의 규모를 이상적으로 알지 못하고이 작업을 수행하고 싶습니다. 텍스트가 대략 왼쪽 상단에 있거나 대략 오른쪽 상단에 있기를 원합니다. 범례 유형 위치 지정을 사용하면 어쨌든 산점도 점과 겹치지 않아야합니다.

감사!


당신은 상자에 텍스트를 넣어하려는 경우 stackoverflow.com/questions/20842613/...
라파엘

1
나는 이것이이 질문 의 중복이라고 생각합니다 . 중복 질문은 훨씬 더 나은 답변을 제공하지만 여기에 제공된 답변 유형 ( text및 사용 ax.transAxes)은 포함되지 않습니다.
ImportanceOfBeingErnest

답변:


162

사용할 수 있습니다 text.

text(x, y, s, fontsize=12)

text 좌표는 축을 기준으로 지정 될 수 있으므로 텍스트의 위치는 플롯의 크기와 무관합니다.

기본 변환은 텍스트가 데이터 좌표에 있음을 지정합니다. 또는 축 좌표에 텍스트를 지정할 수 있습니다 (0,0은 왼쪽 아래, 1,1은 오른쪽 위). 아래 예제는 좌표축의 중앙에 텍스트를 배치합니다.

text(0.5, 0.5,'matplotlib',
     horizontalalignment='center',
     verticalalignment='center',
     transform = ax.transAxes)

텍스트가 분산 된 지점을 방해하는 것을 방지하는 것은 더 어렵습니다. 더 쉬운 방법은 y_axis (ymax in ylim((ymin,ymax)))를 포인트의 최대 y 좌표보다 약간 높은 값으로 설정하는 것입니다. 이렇게하면 항상 텍스트를위한 여유 공간이 있습니다.

편집 : 여기에 예가 있습니다.

In [17]: from pylab import figure, text, scatter, show
In [18]: f = figure()
In [19]: ax = f.add_subplot(111)
In [20]: scatter([3,5,2,6,8],[5,3,2,1,5])
Out[20]: <matplotlib.collections.CircleCollection object at 0x0000000007439A90>
In [21]: text(0.1, 0.9,'matplotlib', ha='center', va='center', transform=ax.transAxes)
Out[21]: <matplotlib.text.Text object at 0x0000000007415B38>
In [22]:

여기에 이미지 설명 입력

ha 및 va 매개 변수는 삽입 지점을 기준으로 텍스트 정렬을 설정합니다. 즉. ha = 'left'는 프레임을 수동으로 축소 (좁게) 할 때 긴 텍스트가 왼쪽 축을 벗어나는 것을 방지하는 좋은 설정입니다.


센터링을 얻었지만 어떻게하면 왼쪽 상단으로 만들 수 있습니까? 나는 "horizontalalignment"를 'left'로 설정하고 verticalalignment를 top으로 설정하려고했지만 작동하지 않습니다

1
표시된대로 x, y 값으로 플레이해야합니다 ( 0,0은 왼쪽 아래, 1,1은 오른쪽 위 ). 편집을 참조하십시오
호아킨

2
@ user3645626 가져 오기 : from pylab import figure, text, scatter, show 대답의 코드가 명시 적 가져 오기가 필요하지 않은 pylab 모드의 ipython 콘솔에서 실행되었습니다. 깨끗한 환경에서 위를 가져 와서 show()플롯을 확인해야합니다
joaquin

5

한 가지 해결책은 plt.legend실제 범례를 원하지 않더라도 함수 를 사용하는 것 입니다. lockeyterm 을 사용하여 범례 상자의 위치를 ​​지정할 수 있습니다 . 이 웹 사이트에서 더 많은 정보를 찾을 수 있지만 범례를 배치하는 방법을 보여주는 예제도 포함했습니다.

ax.scatter(xa,ya, marker='o', s=20, c="lightgreen", alpha=0.9)
ax.scatter(xb,yb, marker='o', s=20, c="dodgerblue", alpha=0.9)
ax.scatter(xc,yc marker='o', s=20, c="firebrick", alpha=1.0)
ax.scatter(xd,xd,xd, marker='o', s=20, c="goldenrod", alpha=0.9)
line1 = Line2D(range(10), range(10), marker='o', color="goldenrod")
line2 = Line2D(range(10), range(10), marker='o',color="firebrick")
line3 = Line2D(range(10), range(10), marker='o',color="lightgreen")
line4 = Line2D(range(10), range(10), marker='o',color="dodgerblue")
plt.legend((line1,line2,line3, line4),('line1','line2', 'line3', 'line4'),numpoints=1, loc=2) 

이므로 loc=2범례는 플롯의 왼쪽 상단에 있습니다. 그리고 텍스트가 플롯과 겹치는 경우를 사용하여 더 작게 만들 수 있습니다 legend.fontsize. 그러면 범례가 더 작아집니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.