xlabelがmatplotlibプロットで切り捨てられるのはなぜですか?


303

matplotlib非常に「高い」xlabelがある場所を使用してデータセットをプロットしています(これはTeXでレンダリングされた数式で、分数を含み、したがって高さが数行のテキストに相当します)。

いずれにせよ、数字を描くとき、​​数式の下部は常に途切れています。Figureのサイズを変更してもこれには役に立たないようで、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 11/07/21

1
この問題を引き起こす最小限のサンプルコードを投稿できると役立ちます。このようにして、人々はあなたの問題をより早く理解して再現でき、彼らはあなたを助ける可能性が高くなります。
デニルソンサマイア

あなたのコードは私のマシン(ubuntu 11.04 64bit)で問題なく動作します(数式を完全に表示します)。たぶん、マシン固有の問題です[画像で使用されている、間違った寸法情報を持つフォントのようなものですか?]。おそらく、質問で使用しているシステムを指定できます。
Mac

9
あなたも試してみたいことがありますplt.savefig("test.png",bbox_inches='tight')stackoverflow.com/questions/21288062/...
Yiboヤン

回答:


475

使用する:

import matplotlib.pyplot as plt

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

ラベルのためのスペースを作るため。

編集:

答えを出したのでmatplotlibtight_layout()機能を追加しました。だから私はそれを使うことを勧めます:

plt.tight_layout()

xlabelのためのスペースを作る必要があります。


141
プロットの本質的な部分のための余地を作るために追加の呼び出しを行う必要があることはかなり奇妙だと思います。これの背後にある理由は何ですか?
別のベン

3
ただ、好奇心のうち、なぜあなたは持っているんgcf().subplots_adjustではなくplt.subplots_adjust?違いはありますか?
ジュニパー

49
何であるgcfgca?説明を怠った!
大佐パニック

12
同じ問題に直面しtight_layout()、xlabelsのカットオフを修正しましたが、残念ながらylabelがカットオフされていました(以前はカットオフされていませんでした)。ただし、最初の対策(subplots_adjust(bottom=0.25))は問題なく機能しました。ありがとう。
スコット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})

このアプローチを使用する利点は、コードが異なる構成のマシンで同じグラフを生成することです。


このオプションを使用すると、カラーバーが大きすぎるという問題が発生しました。可能な解決策の1つをここで説明します:matplotlib.org/users/tight_layout_guide.html
PiQuer '22

2
tight_layoutは、カスタム(大きな!)フォントサイズを設定すると混乱します。これははるかに良い仕事をします。
BenB 2016

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.