घुमाया xticklabels उनके संबंधित xticks के साथ


140

नीचे दिए गए आंकड़े की एक्स अक्ष की जाँच करें। मैं लेबलों को बाईं ओर कैसे स्थानांतरित कर सकता हूं ताकि वे अपने संबंधित टिक्स के साथ संरेखित हों?

मैं लेबल का उपयोग करके घूम रहा हूं:

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

लेकिन, जैसा कि आप देख सकते हैं, रोटेशन पाठ लेबल के बीच में केंद्रित है। जिससे ऐसा लगता है कि वे दाईं ओर शिफ्ट हो गए हैं।

मैंने इसके बजाय इसका उपयोग करने की कोशिश की है:

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

... लेकिन यह वह नहीं है जो मैं चाहता था। और "anchor"लगता है कि केवल rotation_modeपैरामीटर के लिए अनुमत मान है ।

उदाहरण

जवाबों:


202

आप टिकलैबल्स के क्षैतिज संरेखण को सेट कर सकते हैं, नीचे उदाहरण देखें। यदि आप घुमाए गए लेबल के चारों ओर एक आयताकार बॉक्स की कल्पना करते हैं, तो आयत के किस तरफ आप टिकपॉइंट के साथ गठबंधन करना चाहते हैं?

आपके विवरण को देखते हुए, आप चाहते हैं: हा = 'सही'

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()यदि आप अभी मौजूदा लेबल का उपयोग करना चाहते हैं तो आप इसका उपयोग भी कर सकते हैं।
बेन

धन्यवाद रटगर, यह एक महान उदाहरण है, जिसने मेरा दिन बचाया!
एलिसा

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डिफ़ॉल्ट के लिए "केंद्र" प्रतीत होता है।)

[१] आप पाते हैं कि यदि आप "टेक्स्ट प्रॉपर्टीज" वाक्यांश के लिए खोज करते हैं, तो यह ऑक्सिक्स डॉक्यूमेंटेशन में वर्णित है ।


3

यदि आप xtick लेबल को संशोधित नहीं करना चाहते हैं, तो आप इसका उपयोग कर सकते हैं:

plt.xticks(rotation=45)


3
लेकिन इसमें गलत तरीके से संरेखित लेबल की समस्या है। लेकिन, @RutgierCassies की ट्रिक का उपयोग करने के लिए, कोई वास्तव में उपयोग कर सकता हैplt.xticks(rotation=45,ha='right')
Frédéric Grosshans
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.