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.