回転したxticklabelsをそれぞれのxticksに揃える


140

下図のx軸を確認してください。ラベルをそれぞれの目盛りに揃えるように少し左に移動するにはどうすればよいですか?

私はラベルを回転させています:

ax.set_xticks(xlabels_positions)
ax.set_xticklabels(xlabels, rotation=45)

しかし、ご覧のとおり、回転はテキストラベルの中央を中心にしています。右にシフトしているように見えます。

代わりにこれを使ってみました:

ax.set_xticklabels(xlabels, rotation=45, rotation_mode="anchor")

...しかし、それは私が望んだことをしません。そして、"anchor"使用できる唯一の値であるように思わrotation_modeパラメータ。

例

回答:


202

目盛りラベルの水平方向の配置を設定できます。以下の例を参照してください。回転したラベルを囲む長方形のボックスを想像する場合、長方形のどちら側を目盛りに揃えますか?

あなたの説明を考えると、あなたは欲しい:ha = 'right'

n=5

x = np.arange(n)
y = np.sin(np.linspace(-3,3,n))
xlabels = ['Ticklabel %i' % i for i in range(n)]

fig, axs = plt.subplots(1,3, figsize=(12,3))

ha = ['right', 'center', 'left']

for n, ax in enumerate(axs):
    ax.plot(x,y, 'o-')
    ax.set_title(ha[n])
    ax.set_xticks(x)
    ax.set_xticklabels(xlabels, rotation=40, ha=ha[n])

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


15
xlabels = ax.get_xticklabels()既存のラベルだけを使用したい場合にも使用できます。
ベン

ラトガーに感謝します。これは素晴らしい例であり、私の一日を救いました!
alisa

13

ラベルの回転は確かに可能です。ただし、そうするとテキストの可読性が低下することに注意してください。1つの代替方法は、次のようなコードを使用してラベルの位置を変更することです。

import numpy as np
n=5

x = np.arange(n)
y = np.sin(np.linspace(-3,3,n))
xlabels = ['Long ticklabel %i' % i for i in range(n)]


fig, ax = plt.subplots()
ax.plot(x,y, 'o-')
ax.set_xticks(x)
labels = ax.set_xticklabels(xlabels)
for i, label in enumerate(labels):
    label.set_y(label.get_position()[1] - (i % 2) * 0.075)

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

その他の背景と代替案については、私のブログのこの投稿を参照してください


9

ループのない簡単な方法は、horizontalalignmentTextプロパティをxticks[1]のキーワード引数として使用することです。以下では、コメント行で、xticks配置を「正しい」に強制しました。

n=5
x = np.arange(n)
y = np.sin(np.linspace(-3,3,n))
xlabels = ['Long ticklabel %i' % i for i in range(n)]
fig, ax = plt.subplots()
ax.plot(x,y, 'o-')

plt.xticks(
        [0,1,2,3,4],
        ["this label extends way past the figure's left boundary",
        "bad motorfinger", "green", "in the age of octopus diplomacy", "x"], 
        rotation=45,
        horizontalalignment="right")    # here
plt.show()

yticksデフォルトでは既に右端が目盛りに揃っていますがxticks、デフォルトでは「中央」に表示されます。)

[1] 「テキストプロパティ」という語句を検索すると、xticksのドキュメントで説明されていることがわかります。


3

xtickラベルを変更したくない場合は、次のように使用できます。

plt.xticks(rotation=45)


3
ただし、ラベルが正しく配置されないという同じ問題があります。しかし、@ RutgierCassiesのトリックを使用するには、実際に使用できますplt.xticks(rotation=45,ha='right')
フレデリック
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.