Matplotlibは目盛りラベルのフォントサイズを小さくします


299

matplotlibの図で、目盛りラベルのフォントサイズをax1.set_xticklabels()小さくする方法を教えてください。

さらに、それを水平から垂直にどのように回転させることができますか?


この質問をしてくれてありがとう、私は今この問題を解決しようとしています。私はここでは強く意見を述べていませんが、有権者は最良の答えは受け入れられたものではないと考えているようです。どう思いますか?
アーロンホール

matplotlibのフォントサイズを変更するには、少なくとも5つの異なる方法があることを私は適切に読みましたか?:D
famargar

回答:


127

MPLの新しいバージョンには、このタスクへのショートカットがあることに注意してください。例は、この質問の他の回答に示されていますhttps : //stackoverflow.com/a/11386056/42346

以下のコードは説明のためのものであり、必ずしも最適化されているとは限りません。

import matplotlib.pyplot as plt
import numpy as np

def xticklabels_example():
    fig = plt.figure() 

    x = np.arange(20)
    y1 = np.cos(x)
    y2 = (x**2)
    y3 = (x**3)
    yn = (y1,y2,y3)
    COLORS = ('b','g','k')

    for i,y in enumerate(yn):
        ax = fig.add_subplot(len(yn),1,i+1)

        ax.plot(x, y, ls='solid', color=COLORS[i]) 

        if i != len(yn) - 1:
            # all but last 
            ax.set_xticklabels( () )
        else:
            for tick in ax.xaxis.get_major_ticks():
                tick.label.set_fontsize(14) 
                # specify integer or one of preset strings, e.g.
                #tick.label.set_fontsize('x-small') 
                tick.label.set_rotation('vertical')

    fig.suptitle('Matplotlib xticklabels Example')
    plt.show()

if __name__ == '__main__':
    xticklabels_example()

ここに画像の説明を入力してください


84
余談ですが、目盛りラベルオブジェクトをループする代わりに、を使用できますplt.setp。(また、見てくださいax.tick_params)たとえば、あなたはただ行うことができますplt.setp(ax.get_xticklabels(), rotation='vertical', fontsize=14)。また、Axesオブジェクトには、ax.is_last_row()例のような場合に便利なメソッドがあります。代わりにif i != len...、あなたがすることができますif not ax.is_last_row()。(なぜそれがメソッドなのか、私には手掛かりがありません... Matplotlibは明らかにプロパティを嫌っています!)
Joe Kington

@ジョー:初めて聞いたis_last_row()ので、ありがとうございます!私はplt.setp過去に使用したことがあり、目盛りラベルをカスタマイズするより標準的な方法を表しているとは必ずしも確信していませんでした。あなたはその疑いを取り除きました、ありがとう。より広く言えば、特にmatplotlibタグの答えは、私を畏敬の念に陥らせることがよくあります。これからもいい結果を出し続けてください。
Mechanical_Meat

1
ありがとう!! 特にあなたからの親切な言葉に感謝します!この場合、Canonicalは非常に相対的です。 plt.setp「MATLAB主義」であり、明示的なループはおそらくもっとPythonicです。私自身、Matlabの改宗者であることsetpは自然なことですが、それぞれの人にとっては同じです。どちらも非常に読みやすいです
ジョー

50
新バージョンでは、私はあなたが使用していたことがわかったlabelsizeの例:パラメータax.tick_params(axis='x', labelsize=8)
Vladtn

あるべきget_ticklabelsではないget_major_ticks
ジェズ

506

実際にはもっと簡単な方法があります。私が見つけたばかり:

import matplotlib.pyplot as plt
# We prepare the plot  
fig, ax = plt.subplots()

# We change the fontsize of minor ticks label 
ax.tick_params(axis='both', which='major', labelsize=10)
ax.tick_params(axis='both', which='minor', labelsize=8)

これlabelはあなたの質問の一部のサイズにしか答えません。


2
axis = 'x'または axis = 'y'を使用して、軸の1つだけを変更します
loved.by.Jesus

221

フォントサイズと回転の両方を同時に指定するには、これを試してください:

plt.xticks(fontsize=14, rotation=90)

4
これは、MATLABのようなpyplotインターフェイスで作業するときに使用されることに注意してください。オブジェクト指向のインターフェースの場合、Axesオブジェクトのtick_params()メソッドまたはAxesオブジェクトのset_tick_params()メソッドを使用する必要があります(他の回答を参照)。
wombatonfire

54

または、次のようにすることもできます。

import matplotlib as mpl
label_size = 8
mpl.rcParams['xtick.labelsize'] = label_size 

36
plt.tick_params(axis='both', which='minor', labelsize=12)

これは、新しいラベルを設定せずにフォントサイズを変更したい場合に機能する唯一の答えです。
David Stansby 2017

@DavidStansby私はこれが本当だとは思わない。私はこの正確な問題を抱えており(上記)、このソリューションとは異なる代替方法を使用できました。使用ax.xaxis.set_tick_params(labelsize=20)
カイルスワンソン

1
最も簡単な答えは、axオブジェクトへの参照を必要としない
jeremy_rutman

26

別の選択肢

2つのプロットを並べて表示し、目盛りラベルを個別に調整したいと思います。

上記の解決策は近いものでしたが、うまくいきませんでした。このmatplotlib ページから解決策を見つけました。

ax.xaxis.set_tick_params(labelsize=20)

これはトリックを実行し、ポイントにまっすぐでした。私の使用例では、調整する必要があるのは右側のプロットです。新しい目盛りラベルを作成してからの左側のプロットでは、ラベルを設定するのと同じプロセスでフォントを調整できました。

すなわち

ax1.set_xticklabels(ax1_x, fontsize=15)
ax1.set_yticklabels(ax1_y, fontsize=15)

したがって、私は正しいプロットに使用しました、

ax2.xaxis.set_tick_params(labelsize=24)
ax2.yaxis.set_tick_params(labelsize=24)

微妙な微妙さ...わかっています...しかし、これが誰かの役に立てば幸いです:)

大きさの大きさのラベルのフォントサイズを調整する方法を知っている人がいる場合は、ボーナスポイントになります。

ここに画像の説明を入力してください


22

Matplotlibの現在のバージョンでは、これを行うことができますaxis.set_xticklabels(labels, fontsize='small')


1
これlabelsも指定する必要があります。フォントサイズだけを変えられる方がいいです。
ギモート

16

fontsizeなどのラベル表示パラメータを次のような行で変更することもできます。

zed = [tick.label.set_fontsize(14) for tick in ax.yaxis.get_major_ticks()]

1
副作用のあるリスト内包表記を使用することはベストプラクティスではないと思います。代わりに標準のforループを使用することをお勧めします。
jjmontes

14

小さいフォントの場合は、

ax1.set_xticklabels(xticklabels, fontsize=7)

そしてそれはうまくいきます!


xticklabelsをどのように定義しますか?
mLstudent33

10

以下は私のために働きました:

ax2.xaxis.set_tick_params(labelsize=7)
ax2.yaxis.set_tick_params(labelsize=7)

上記の利点は、あなたが提供する必要はありませんであるarrayのをlabelsそして上の任意のデータで動作しますaxes

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.