सीबोर्न फैक्टरप्लॉट में लेबल टेक्स्ट को घुमाएं


152

मेरे पास एक साधारण फैक्टरप्लॉट है

import seaborn as sns
g = sns.factorplot("name", "miss_ratio", "policy", dodge=.2, 
    linestyles=["none", "none", "none", "none"], data=df[df["level"] == 2])

यहाँ छवि विवरण दर्ज करें

समस्या यह है कि एक्स लेबल सभी एक साथ चलते हैं, जिससे उन्हें अपठनीय बना दिया जाता है। आप पाठ को कैसे घुमाते हैं ताकि लेबल पठनीय हो?


29
import matplotlib.pylab as pltplt.xticks(rotation=‌​45)
राफेलवेले

Dexplot पुस्तकालय , लेबल, तेह आंकड़ा आकार सेट लपेट matplotlib का उपयोग किए बिना सभी dpi के की क्षमता है।
टेड पेट्रो

जवाबों:


137

अमन सही है कि आप सामान्य matplotlib कमांड का उपयोग कर सकते हैं, लेकिन यह भी इसमें बनाया गया है FacetGrid:

import seaborn as sns
planets = sns.load_dataset("planets")
g = sns.factorplot("year", data=planets, aspect=1.5, kind="count", color="b")
g.set_xticklabels(rotation=30)

यहाँ छवि विवरण दर्ज करें

इस "काम नहीं करता" का दावा करने वाली कुछ टिप्पणियां और एक अन्य उत्तर हैं, हालांकि, कोई भी यहां लिखे अनुसार कोड चला सकता है और देख सकता है कि यह काम नहीं करता है। अन्य उत्तर क्या काम नहीं कर रहा है इसका एक प्रतिलिपि प्रस्तुत करने योग्य उदाहरण प्रदान नहीं करता है, जिससे इसे संबोधित करना बहुत मुश्किल है, लेकिन मेरा अनुमान है कि लोग इस समाधान को उन कार्यों के आउटपुट पर लागू करने का प्रयास कर रहे हैं जो एक केAxes बजाय एक वस्तु वापस करते हैं Facet Grid। ये अलग-अलग चीजें हैं, और Axes.set_xticklabels()विधि को वास्तव में लेबल की एक सूची की आवश्यकता होती है और केवल मौजूदा लेबल के गुणों को बदल नहीं सकता है Axes। सबक यह है कि यह ध्यान देना महत्वपूर्ण है कि आप किस तरह की वस्तुओं के साथ काम कर रहे हैं।


मुझे एक त्रुटि मिली: IndexError: बहुत सारे सूचकांक। मेरा कोड! g = sns.factorplot ("month_date", "num_proposals", "account", Sorted_data, col = "account", col_wrap = 3, sharex = False); g.set_xticklabels (रोटेशन = 30)
yoshiserry

10
@soupault - यह मेरे लिए काम करता है, जो आप के साथ आया था, लेकिन शायद थोड़ा सा क्लीनर- g.axes.flatten () में ax के लिए: ax.set_xticklabels (ax.get_xticklabels) (, रोटेशन = 30)
odedbd

6
ha="right"एक्स-अक्ष लेबल को उनके टिक चिह्नों पर केन्द्रित करने के लिए उपयोग करें । अर्थातg.set_xticklabels([label1, label2], rotation=30, ha='right')
मानवलन गजपति

72
उपरोक्त कुछ टिप्पणियों के समान, इसने मुझे एक त्रुटि दी जब तक कि मैं इस उत्तर के g.set_xticklabels(rotation=30)लिए g.set_xticklabels(g.get_xticklabels(), rotation=30)धन्यवाद में नहीं बदल गया : stackoverflow.com/a/39689464/1870832
अधिकतम पावर

1
कुछ सीबोनल प्लॉटिंग विधियाँ एक FacetGridवस्तु लौटाती हैं, कुछ एक माटप्लोटलिब Axesवस्तु लौटाती हैं । पूर्व के लिए, लेबल सेट नहीं करना बाद के लिए काम करेगा, यह नहीं होगा। आप देख सकते हैं FacetGridकि दस्तावेज देखकर कौन सी वस्तुएं हैं : seaborn.pydata.org/api.html । उदाहरण के लिए, यदि आप इसका उपयोग करते हैं तो g = sns.catplot()यह काम करेगा, लेकिन sns.barplot()ऐसा नहीं होगा क्योंकि यह एक Axesवस्तु लौटाता है।
गेटअप 8

252

मुझे @mwaskorn द्वारा जवाब के साथ एक समस्या थी, अर्थात्

g.set_xticklabels(rotation=30)

विफल रहता है, क्योंकि इसके लिए भी लेबल की आवश्यकता होती है। @Aman द्वारा उत्तर की तुलना में थोड़ा आसान सिर्फ जोड़ना है

plt.xticks(rotation=45)

33
आप चाहें तो लेबल भी प्राप्त कर सकते हैं g.set_xticklabels(g.get_xticklabels(), rotation=30)। यदि आप आउटपुट को दबाना चाहते हैं तो इसे एक चर पर असाइन करें।
joelostblom

3
मुझे लगता है कि यह सही है, जब सेटिंग plt.xticsने मेरे लिए काम किया।
मुअम्मर

एक वायलिन प्लॉट और plt.xticks (रोटेशन = n) के लिए उपरोक्त सभी विकल्पों की कोशिश की गई है, केवल एक ही है जो मुझे काम करने के लिए मिल सकता है
एक रोब 4

29

यह अभी भी एक matplotlib वस्तु है। इसे इस्तेमाल करे:

# <your code here>
locs, labels = plt.xticks()
plt.setp(labels, rotation=45)

8

अगर किसी को पता है कि यह क्लस्टरमैप कोरग्रिड्स (किसी दिए गए समुद्री उदाहरण का हिस्सा) के लिए कैसे होता है:

import seaborn as sns
import matplotlib.pyplot as plt
sns.set(context="paper", font="monospace")

# Load the datset of correlations between cortical brain networks
df = sns.load_dataset("brain_networks", header=[0, 1, 2], index_col=0)
corrmat = df.corr()

# Set up the matplotlib figure
f, ax = plt.subplots(figsize=(12, 9))

# Draw the heatmap using seaborn
g=sns.clustermap(corrmat, vmax=.8, square=True)
rotation = 90 
for i, ax in enumerate(g.fig.axes):   ## getting all axes of the fig object
     ax.set_xticklabels(ax.get_xticklabels(), rotation = rotation)


g.fig.show()

6

आप plt.setpनिम्नानुसार भी उपयोग कर सकते हैं :

import matplotlib.pyplot as plt
import seaborn as sns

plot=sns.barplot(data=df,  x=" ", y=" ")
plt.setp(plot.get_xticklabels(), rotation=90)

90 डिग्री लेबल को घुमाने के लिए।


5

एक के लिए seaborn.heatmap, आप इनका उपयोग करके रोटेट कर सकते हैं ( @ अमन के जवाब पर आधारित )

pandas_frame = pd.DataFrame(data, index=names, columns=names)
heatmap = seaborn.heatmap(pandas_frame)
loc, labels = plt.xticks()
heatmap.set_xticklabels(labels, rotation=45)
heatmap.set_yticklabels(labels[::-1], rotation=45) # reversed order for y

1
यह मेरे लिए काम करता है, बस रोटेशन परम में गुजरने से कुछ नहीं हुआ, मुझे इस काम को करने के लिए लेबल्स में भी पास होना पड़ा
रवीन बीमेसिंह

0

Facetgrid द्वारा लिए गए किसी भी समुद्री भूखंड के साथ काम नहीं करेगा (उदाहरण के लिए catplot)

g.set_xticklabels(rotation=30) 

हालाँकि, बार्प्लॉट, काउंटप्लॉट, इत्यादि काम करेंगे क्योंकि वे मुखर रूप से समर्थित नहीं हैं। नीचे उनके लिए काम करेंगे।

g.set_xticklabels(g.get_xticklabels(), rotation=30)

इसके अलावा, यदि आपके पास एक-दूसरे के ऊपर 2 ग्राफ़ ओवरले हैं, तो ग्राफ पर सेट_एक्सिक्लेबल की कोशिश करें जो इसका समर्थन करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.