2015-07-26 4 views
8

के साथ एनोटेशन को कस्टमाइज़ करना मैं पाइथन में सेबर्न मॉड्यूल के साथ कुछ आंकड़ों को कस्टमाइज़ करने की कोशिश कर रहा हूं, लेकिन मेरे पास कस्टम लेबल या एनोटेशन बनाने की किस्मत नहीं है।सेबर्न के फैकेटग्रिड

plot = sns.FacetGrid(data = data, col = 'bot', margin_titles = True).set_titles('Human', 'Bot') 
bins = np.linspace(0, 2000, 15) 
plot = plot.map(plt.hist, 'friends_count', color = 'black', lw = 0, bins = bins) 
plot.set_axis_labels('Number Following', 'Count') 
sns.despine(left = True, bottom = True) 

enter image description here

मैं दो बातें करना चाहते हैं: 1. डिफ़ॉल्ट कारक लेबल बदल, उदा मैं कुछ कोड है कि निम्न चित्र उत्पन्न करता मिल गया है 'बॉट = 0.0', सार्थक पाठ के साथ, और 2. प्रत्येक श्रेणी के लिए निम्नलिखित संख्या पर लंबवत रेखाएं खींचें।

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

fake = pd.DataFrame({'val': [1, 2, 2, 3, 3, 2, 1, 1, 2, 3], 'group': [0, 0, 0, 0, 0, 1, 1, 1, 1, 1]}) 
plot = sns.FacetGrid(data = fake, col = 'group', margin_titles = True).set_titles('zero', 'one') 
plot = plot.map(plt.hist, 'val', color = 'black', lw = 0) 
sns.despine(left = True, bottom = True) 

किसी FacetGrids अनुकूलित करने के लिए कैसे पता:

यहाँ एक आत्म निहित उदाहरण है?

+0

जांच 'FacetGrid.set_titles' विधि:

def vertical_mean_line(x, **kwargs): plt.axvline(x.mean(), **kwargs) 

तो आप सभी की जरूरत फिर से साजिश है। – mwaskom

+1

हाँ, कोशिश की लेकिन कुछ भी प्रस्तुत नहीं करता है। प्रत्येक पर अलग-अलग बिंदुओं पर लंबवत रेखाएं बनाने पर कोई विचार? –

+2

सुनिश्चित नहीं है कि "कुछ भी प्रस्तुत नहीं करता" का अर्थ है। यदि आपने चीजों की कोशिश की और काम नहीं किया, तो आपको वह सवाल भी जोड़ना चाहिए। साथ ही यह मदद करना बहुत आसान होता है जब आपके प्रश्न में स्वयं निहित उदाहरण होता है कि कोई व्यक्ति प्रतिलिपि बनाने और चिपकाने के लिए पेस्ट कर सकता है। शायद आप ट्यूटोरियल में उपयोग किए जाने वाले उदाहरण सीबर्न डेटासेट्स में से एक का उपयोग कर सकते हैं। – mwaskom

उत्तर

12

set_titles के बारे में कुछ चीज़ें।

पहले, डिफ़ॉल्ट खिताब FacetGrid.map विधि में तैयार कर रहे हैं, तो आप खिताब को बदलना चाहते हैं, तो आप अंकन के बाद set_titlesकॉल करनी होगी, वरना वे ओवरराइट किया जाएगा।

दूसरा, यदि आप विधि के लिए डॉकस्ट्रिंग देखते हैं, तो यह केवल शीर्षकों की मनमानी सूची नहीं लेता है। यह एक तरह से कैसे शीर्षक प्रदान की गई है बदलने के लिए स्तंभ चर नाम और मान का उपयोग प्रदान करता है: "सार्थक पाठ" के लिए सबसे आसान तरीका है

template : string 
    Template for all titles with the formatting keys {col_var} and 
    {col_name} (if using a `col` faceting variable) and/or {row_var} 
    and {row_name} (if using a `row` faceting variable). 

तो अपने dataframe में सार्थक डेटा का प्रयोग है। यादृच्छिक डेटा के साथ इस उदाहरण लें:

df = pd.DataFrame({'val': np.random.randn(100), 
        'group': np.repeat([0, 1], 50)}) 

आप "समूह" चाहते हैं zero और one होने के लिए आपको सिर्फ इतना है कि स्तंभ बदलना चाहिए, या एक नया एक:

df["group"] = df["group"].map({0: "zero", 1; "one"}) 

तो फिर तुम कहना डॉन 'टी, FacetGrid.set_titles उपयोग करने के लिए उचित तरीका होगा शीर्षक में चर नाम करना चाहते हैं

g = sns.FacetGrid(data=df, col='group') 
g.map(plt.hist, 'val', color='black', lw=0) 
g.set_titles('{col_name}') 

some bar graphs

यदि आप स्वयं की साजिश रचने कर रहे हैं बदलने के लिए नहीं करना चाहते हैं, तो आप विशेषता सेट करने पर matplotlib सीधे अक्ष, होगा की तरह कुछ:

for ax, title in zip(g.axes.flat, ['zero', 'one']): 
    ax.set_title(title) 

ध्यान दें कि यह कम वरीय है उपर्युक्त विधि के लिए क्योंकि आपको यह सुनिश्चित करने के बारे में बहुत सावधान रहना होगा कि आपकी सूची का क्रम सही है और यह बदलने वाला नहीं है, जबकि डेटाफ्रेम से जानकारी प्राप्त करना अधिक मजबूत होगा।

मतलब साजिश करने के लिए, आपको एक छोटा सा फ़ंक्शन बनाना होगा जिसे FacetGrid.map पर पारित किया जा सकता है। ट्यूटोरियल में इसे कैसे करें multiple examples हैं।इस मामले में, यह काफी आसान है:

g = sns.FacetGrid(data=df, col='group') 
g.map(plt.hist, 'val', color='black', lw=0) 
g.map(vertical_mean_line, 'val') 
g.set_titles('{col_name}') 

some more bar graphs

+0

ग्रेट उत्तर। आईएमओ उन लेबलों के साथ एन्कोडिंग डेटा के साथ परेशानी जो आप विज़ुअलाइज़ेशन के लिए उपयोग करेंगे, यह है कि यह बाद में डेटा पर रूपांतरण लागू करने से रोकता है (बार-बार पुनः-एन्कोडिंग के बिना)। उदाहरण के लिए, अगर मैं केंद्र और स्केल करना चाहता था तो मुझे उन लेबलों को वापस [0, 1] में बदलना होगा। भविष्य में आकृति लेबलिंग और एनोटेशन के लिए बेहतर समर्थन देखने की उम्मीद है। पाइथन के लिए ggplot2 की तरह कुछ सुरुचिपूर्ण और शक्तिशाली होना बहुत अच्छा होगा। –

+4

* [कोबी विनर] से टिप्पणी (http://stackoverflow.com/users/5339699/): * '{col_value}' 'col_name}' ('g.set_titles ('{col_value}' में होना चाहिए) 'कोड खंड)? ऐसा लगता है कि कोई '{col_value} 'टेम्पलेट कोड नहीं है। –

+0

@erinshellman क्या आपने yhat की ggplot लाइब्रेरी देखी है? http://ggplot.yhathq.com/docs/facet_grid.html –

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