Döndürülmüş xtick etiketlerini ilgili xticks ile hizalama


140

Aşağıdaki şeklin x eksenini kontrol edin. Etiketleri, ilgili kenelerle hizalanacak şekilde nasıl biraz sola kaydırabilirim?

Etiketleri kullanarak döndürüyorum:

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

Ancak, gördüğünüz gibi, döndürme metin etiketlerinin ortasında ortalanır. Bu da onları sağa kaydırılmış gibi gösteriyor.

Bunun yerine kullanmayı denedim:

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

... ama istediğim şeyi yapmıyor. Ve "anchor"için izin verilen tek değer gibi görünüyor rotation_modeparametresi.

Misal

Yanıtlar:


202

İşaret etiketlerinin yatay hizalamasını ayarlayabilirsiniz, aşağıdaki örneğe bakın. Döndürülmüş etiketin çevresinde dikdörtgen bir kutu hayal ediyorsanız, dikdörtgenin hangi tarafının işaretleme noktasıyla hizalanmasını istiyorsunuz?

Açıklamanız göz önüne alındığında, şunu istersiniz: 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])

resim açıklamasını buraya girin


15
Ayrıca kullanabilirsiniz xlabels = ax.get_xticklabels()sadece mevcut etiketleri kullanmak istiyorsanız.
— Ben

Teşekkürler Rutger, bu harika bir örnek, günümü kurtardı!
— alisa

13

Etiketleri döndürmek kesinlikle mümkündür. Bununla birlikte, metnin okunabilirliğini azaltır. Bir alternatif, etiket konumlarını aşağıdaki gibi bir kod kullanarak değiştirmektir:

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)

resim açıklamasını buraya girin

Daha fazla arka plan ve alternatif için blogumdaki bu gönderiye bakın


9

Kolay, döngüsüz bir alternatif, horizontalalignmentText özelliğini xticks[1] için anahtar kelime bağımsız değişkeni olarak kullanmaktır . Aşağıda, yorum satırında, xtickshizalamayı "doğru" olmaya zorladım .

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()

( ytickssağ kenarı varsayılan olarak onay işaretiyle zaten hizalar, ancak xticksvarsayılan değer için "merkez" görünür.)

[1] "Metin özellikleri" ifadesini ararsanız , xticks belgelerinde açıklananları bulabilirsiniz .


3

Xtick etiketlerini değiştirmek istemiyorsanız, şunları kullanabilirsiniz:

plt.xticks(rotation=45)


3
Ancak, yanlış hizalanmış etiketlerle aynı soruna sahiptir. Ancak, @RutgierCassies'in hünerini kullanmak için, gerçekten kullanılabilirplt.xticks(rotation=45,ha='right')
— Frédéric Grosshans
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.