Twiny를 사용할 때 Python Matplotlib 그림 제목이 축 레이블과 겹칩니다.


139

다음과 같이 twiny를 사용하여 동일한 그래프에 두 개의 개별 수량을 플로팅하려고합니다.

fig = figure()
ax = fig.add_subplot(111)
ax.plot(T, r, 'b-', T, R, 'r-', T, r_geo, 'g-')
ax.set_yscale('log')
ax.annotate('Approx. sea level', xy=(Planet.T_day*1.3,(Planet.R)/1000), xytext=(Planet.T_day*1.3, Planet.R/1000))
ax.annotate('Geostat. orbit', xy=(Planet.T_day*1.3, r_geo[0]), xytext=(Planet.T_day*1.3, r_geo[0]))
ax.set_xlabel('Rotational period (hrs)')
ax.set_ylabel('Orbital radius (km), logarithmic')
ax.set_title('Orbital charts for ' + Planet.N, horizontalalignment='center', verticalalignment='top')


ax2 = ax.twiny()
ax2.plot(v,r,'k-')
ax2.set_xlabel('Linear speed (ms-1)')

show()

데이터가 잘 표시되지만 그림 제목이 보조 x 축의 축 레이블과 겹치므로 거의 읽을 수 없습니다 (그림 예제를 게시하고 싶었지만 충분히 높은 담당자).

차트를 더 예쁘게 보이도록 제목을 수십 픽셀 위로 직접 옮길 수있는 간단한 방법이 있는지 알고 싶습니다.


1
스택 오버플로에 오신 것을 환영합니다! 당신은 당신의 사진의 이미지 게시에 링크하면, 더 높은 담당자는 당신을 위해 게시물에 이미지를 포함합니다.
걸려

@Magic-이 질문에 어떤 대답을 받아 들일 것인지 다시 생각해 보시겠습니까? 하기 matplotlib이 정확한 필요 (아래 대부분의 투표 대답) 처리 할 수있는 내장 메커니즘이 추가되었습니다
아멜리오 바스케스 - 레이나

답변:


243

그것이 matplotlib의 이후 버전에서 새로운 기능인지 확실하지 않지만 적어도 1.3.1에서는 다음과 같습니다.

plt.title(figure_title, y=1.08)

이것은에 대해서는 작동 plt.suptitle()하지만에 대해서는 (아직) 작동 하지 않습니다 plt.xlabel().


6
레이블에 대해서는 인수를 설정할 labelpad있습니다 . 여기를 참조 하십시오 .
Felix Hoffmann

1
가치있는 것은 새로운 기능이 아닙니다. title취한 xy(내가 기억하는 어떤 속도로, 길이로) 아주 긴 시간 동안 인수.
Joe Kington

3
plt.set_title ( 'title string', y = 1.08)이 저에게 효과적입니다.
Yu Shen

3
누군가가 1.08의 단위와 기본값을 설명하면 더 도움이 될 것입니다. 내 이해는 기본값은 1
kon psych

3
@JohnCummings 기본값은 y = 1이고 단위는 "axs fraction"인 것 같습니다. 즉, y = 0.5는 제목이 축 가운데에 있음을 나타내고 y = 0은 제목이 맨 아래에 있음을 나타냅니다. 축.
herrlich10

33

을 사용 plt.title하여 텍스트를 직접 잊어 버리십시오 plt.text. 과장된 예는 다음과 같습니다.

import pylab as plt

fig = plt.figure(figsize=(5,10))

figure_title = "Normal title"
ax1  = plt.subplot(1,2,1)

plt.title(figure_title, fontsize = 20)
plt.plot([1,2,3],[1,4,9])

figure_title = "Raised title"
ax2  = plt.subplot(1,2,2)

plt.text(0.5, 1.08, figure_title,
         horizontalalignment='center',
         fontsize=20,
         transform = ax2.transAxes)
plt.plot([1,2,3],[1,4,9])

plt.show()

여기에 이미지 설명을 입력하십시오


@ user815423426 예, tight_layout비표준 게재 위치 에서는 여전히 잘 재생되지 않는 것 같습니다. 아마도 당신은 버그 보고서를 만들 수 있습니까?
걸려

2
적어도 tight.layout을 사용할 때, 최소한 figure.savefig () 사용 하여 플롯을 저장할 때 해결 방법을 찾았습니다 . 그렇다면 title = plt.title(...)다음 옵션을 사용하여 제목 주위에 줄거리를 표시하도록 지정할 수 있습니다 bbox_extra_artists.figure.savefig(filename, bbox_extra_artists=(title), bbox_inches='tight')
junkaholik

10
ax.set_title('My Title\n', fontsize="15", color="red")
plt.imshow(myfile, origin="upper")

'\n'제목 문자열 바로 뒤에 배치 하면 제목 바로 아래에 플롯이 그려집니다. 그것은 빠른 해결책 일 수도 있습니다.


8

하위 플롯 제목과 겹치는 x- 레이블에 문제가있었습니다. 이것은 나를 위해 일했다 :

import matplotlib.pyplot as plt
fig, ax = plt.subplots(2, 1)
ax[0].scatter(...)
ax[1].scatter(...)
plt.tight_layout()
.
.
.
plt.show()

전에

여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오

참고:


4

plt.tight_layout()전에 사용하십시오 plt.show(). 잘 작동한다.


4

이 경우 패드를 사용할 수 있습니다.

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