การจัดตำแหน่ง 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

คุณสามารถตั้งค่าการจัดตำแหน่งแนวนอนของ ticklabels ดูตัวอย่างด้านล่าง หากคุณนึกภาพกล่องสี่เหลี่ยมรอบ ๆ ฉลากที่หมุนแล้วคุณต้องการให้ด้านใดของสี่เหลี่ยมตรงกับขีด

ให้คำอธิบายของคุณคุณต้องการ: ฮ่า = 'ถูกต้อง'

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()ถ้าคุณเพียงต้องการใช้ป้ายกำกับที่มีอยู่
Ben

ขอบคุณ Rutger นี่เป็นตัวอย่างที่ดีบันทึกวันของฉัน!
alisa

13

การหมุนฉลากเป็นไปได้อย่างแน่นอน โปรดทราบว่าการทำเช่นนั้นจะช่วยลดความสามารถในการอ่านของข้อความ อีกทางเลือกหนึ่งคือการสลับตำแหน่งฉลากโดยใช้รหัสเช่นนี้:

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

ทางเลือกที่ง่ายและไม่วนซ้ำคือการใช้horizontalalignmentคุณสมบัติข้อความเป็นอาร์กิวเมนต์คำหลักเป็น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')
Frédéric Grosshans
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.