matplotlib 플롯에서 xlabel이 잘리는 이유는 무엇입니까?


303

나는 matplotlib매우 "높은"xlabel이있는 위치를 사용하여 데이터 세트를 플로팅하고있다 (이것은 TeX에서 렌더링 된 공식으로 분수를 포함하고 따라서 텍스트의 두 줄에 해당하는 높이를 가짐).

어쨌든 그림을 그릴 때 수식의 맨 아래는 항상 잘립니다. 그림 크기를 변경해도 도움이되지 않는 것 같습니다 .x 축을 위로 이동하여 xlabel을위한 공간을 만드는 방법을 알 수 없었습니다. 그와 같은 것이 합리적인 임시 해결책 일 것이지만, 좋은 점은 matplotlib이 레이블이 잘렸다는 것을 자동으로 인식하고 그에 따라 크기를 조정하는 방법을 갖는 것입니다.

다음은 내가 의미하는 바의 예입니다.

import matplotlib.pyplot as plt

plt.figure()
plt.ylabel(r'$\ln\left(\frac{x_a-x_b}{x_a-x_c}\right)$')
plt.xlabel(r'$\ln\left(\frac{x_a-x_d}{x_a-x_e}\right)$')
plt.show()

전체 ylabel을 볼 수 있지만 xlabel은 맨 아래에서 잘립니다.

이것이 기계 특정 문제의 경우, matplotlib 1.0.0을 사용하여 OSX 10.6.8에서 이것을 실행하고 있습니다


4
이미지 호스팅 사이트에 게시하고 여기에 링크 할 수 있습니다.
agf

1
이 문제를 유발하는 최소한의 샘플 코드를 게시 할 수 있으면 도움이됩니다. 이렇게하면 사람들이 문제를 더 빨리 이해하고 재현 할 수있게되어 도움이 될 것입니다.
Denilson Sá Maia

귀하의 코드는 내 컴퓨터 (우분투 11.04 64 비트)에서 잘 작동합니다 (공식을 완전히 표시합니다). 이미지에 잘못된 치수 정보가 사용 된 글꼴과 같은 기계 관련 문제 일 수 있습니다. 질문에 사용중인 시스템을 지정할 수 있습니다.

9
시도해 볼 수도 있습니다 plt.savefig("test.png",bbox_inches='tight'): stackoverflow.com/questions/21288062/…
Yibo Yang

답변:


474

사용하다:

import matplotlib.pyplot as plt

plt.gcf().subplots_adjust(bottom=0.15)

라벨을위한 공간을 만들기 위해.

편집하다:

내가 대답을 한 이후로 기능 matplotlib을 추가했습니다 tight_layout(). 그래서 나는 그것을 사용하는 것이 좋습니다.

plt.tight_layout()

xlabel을위한 공간을 만들어야합니다.


141
나는 줄거리의 필수 부분을위한 공간을 만들기 위해 여분의 전화를 걸 필요가 있다는 것이 꽤 이상하다는 것을 안다. 이 뒤에 추론은 무엇입니까?
다른 벤

3
그냥 호기심 밖으로, 당신은 왜해야합니까 gcf().subplots_adjust보다는 plt.subplots_adjust? 차이가 있습니까?
juniper-

49
무엇 gcfgca? 설명을 게을리했습니다!
Colonic Panic

12
나는 같은 문제에 직면했고 tight_layout(), xlabels 컷오프를 수정했지만 불행히도 내 ylabel이 잘리지 않았습니다 (이전에는 잘리지 않았습니다). 그러나 첫 번째 치료법 ( subplots_adjust(bottom=0.25))은 훌륭하게 작동했습니다. 감사.
Scott H

17
@ColonelPanic gcf()gca()"현재 그림 가져 오기"및 "현재 축 가져 오기"입니다.
DrMisha

150

쉬운 옵션은 플롯 크기를 자동으로 조정하도록 matplotlib를 구성하는 것입니다. 그것은 나를 위해 완벽하게 작동하며 왜 기본적으로 활성화되어 있지 않은지 잘 모르겠습니다.

방법 1

matplotlibrc 파일에서 이것을 설정하십시오.

figure.autolayout : True

matplotlibrc 파일 사용자 정의에 대한 자세한 정보는 여기를 참조하십시오. http://matplotlib.org/users/customizing.html

방법 2

런타임 중에 rcParams를 다음과 같이 업데이트하십시오.

from matplotlib import rcParams
rcParams.update({'figure.autolayout': True})

이 방법을 사용하면 코드가 다르게 구성된 시스템에서 동일한 그래프를 생성 할 수 있다는 이점이 있습니다.


이 옵션을 사용할 때 너무 큰 컬러 바에 문제가있었습니다. 하나의 가능한 해결책은 여기에서 논의됩니다 : matplotlib.org/users/tight_layout_guide.html
PiQuer

2
tight_layout은 사용자 정의 (큰!) 글꼴 크기를 설정할 때 문제를 일으 킵니다. 이것은 훨씬 더 나은 일을합니다.
BenB

LaTeX와 함께 pgf 백엔드를 사용할 때 rcParams 업데이트가 실제로 효과가 있었던 유일한 방법이었습니다. (그래도 음모를 사각형으로 만들지 만)
h4nek

이것 만이 나를 위해 일했다. tight_layout 또는 box_inches가 작동하지 않음
zed111

106

파일에 파일을 저장하려면 bbox_inches="tight"인수를 사용하여 파일을 해결하십시오 .

plt.savefig('myfile.png', bbox_inches = "tight")

2
@Guido 님이 하루를 저장했습니다
pcko1

7

퍼팅 plot.tight_layout()직전, 그래프의 모든 변경 후 show()또는 savefig()문제를 해결합니다.


1
이것은 줄거리의 바닥을위한 공간을 만들지 않지만 오히려 전체 줄거리를 다시 조정합니다.
89f3a1c


5

$HOME/.matplotlib/matplotlib_rc다음과 같이 사용자 정의 패딩을 기본값으로 설정할 수도 있습니다. 아래 예제에서 아래쪽과 왼쪽 상자를 모두 수정했습니다.

# The figure subplot parameters.  All dimensions are a fraction of the
# figure width or height
figure.subplot.left  : 0.1 #left side of the subplots of the figure
#figure.subplot.right : 0.9 
figure.subplot.bottom : 0.15
...
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.