2014-11-20 16 views
31

में टिक लेबल के घूर्णन को बदलना मैं सेबर्न में एक हीटमैप प्लॉट कर रहा हूं। समस्या यह है कि मेरे पास मेरी साजिश में बहुत से वर्ग हैं इसलिए एक्स और वाई लेबल उपयोगी होने के लिए एक-दूसरे के बहुत करीब हैं। तो मैं उपयोग करने के लिए xticks और yticks की एक सूची बना रहा हूँ। हालांकि फ़ंक्शन में इस सूची को पास करने से साजिश में लेबल घुमाए जाते हैं। समुद्री शैवाल को स्वचालित रूप से कुछ टिकों को छोड़ना वाकई अच्छा होगा, लेकिन यह छोड़कर कि मैं यॉटिक्स को सीधे प्राप्त कर पाऊंगा।Seaborn heatmap

import pandas as pd 
import numpy as np 
import seaborn as sns 

data = pd.DataFrame(np.random.normal(size=40*40).reshape(40,40)) 

yticks = data.index 
keptticks = yticks[::int(len(yticks)/10)] 
yticks = ['' for y in yticks] 
yticks[::int(len(yticks)/10)] = keptticks 

xticks = data.columns 
keptticks = xticks[::int(len(xticks)/10)] 
xticks = ['' for y in xticks] 
xticks[::int(len(xticks)/10)] = keptticks 

sns.heatmap(data,linewidth=0,yticklabels=yticks,xticklabels=xticks) 

enter image description here

उत्तर

45

seaborn आंतरिक matplotlib का उपयोग करता है, इस तरह के रूप में आप अपने भूखंडों को संशोधित करने के matplotlib कार्यों का उपयोग कर सकते हैं। मैंने rotation=0 सेट करने के लिए plt.yticks फ़ंक्शन का उपयोग करने के लिए नीचे दिए गए कोड को संशोधित किया है जो समस्या को हल करता है।

import pandas as pd 
import numpy as np 
import matplotlib.pyplot as plt 
import seaborn as sns 


data = pd.DataFrame(np.random.normal(size=40*40).reshape(40,40)) 

yticks = data.index 
keptticks = yticks[::int(len(yticks)/10)] 
yticks = ['' for y in yticks] 
yticks[::int(len(yticks)/10)] = keptticks 

xticks = data.columns 
keptticks = xticks[::int(len(xticks)/10)] 
xticks = ['' for y in xticks] 
xticks[::int(len(xticks)/10)] = keptticks 

sns.heatmap(data,linewidth=0,yticklabels=yticks,xticklabels=xticks) 

# This sets the yticks "upright" with 0, as opposed to sideways with 90. 
plt.yticks(rotation=0) 

plt.show() 

Plot

+10

तो वास्तव में केवल एक ही आवश्यक हिस्सा 'plt.yticks (rotation = 0) ' – Tom

+5

@Tom yes है। शेष कोड वहां है ताकि ओपी (या कोई और) पूरी तरह से काम करने वाली साजिश को दोहरा सके। मैंने उस विशिष्ट भाग पर टिप्पणी की है जहां यह अलग है और यह अलग क्यों है। – Ffisegydd

+0

उन लोगों के लिए जो सूची समझ में हैं 'yticks = data.index' 'yticks = [str (x) अगर मैं i% 10 == 0 else' 'i, x in enumerate (yticks)]' – Overdrivr

11

तुम भी हीटमैप वस्तु के तरीकों कॉल कर सकते हैं: मुझे यकीन है कि क्यों इस sns.heatmap के लिए दस्तावेज में नहीं है नहीं कर रहा हूँ

g = sns.heatmap(data,linewidth=0,yticklabels=yticks,xticklabels=xticks) 
    g.set_yticklabels(g.get_yticklabels(), rotation = 0, fontsize = 8) 

, लेकिन एक ही तरीके यहां वर्णित हैं: http://seaborn.pydata.org/generated/seaborn.FacetGrid.html

मुझे विश्वास है कि ये विधियां हर समुद्री साजिश वस्तु के लिए उपलब्ध हैं लेकिन इसके लिए एक सामान्य API नहीं मिल सका।

संबंधित मुद्दे