2016-06-28 11 views
9
का उपयोग कर

मैं Seaborn का उपयोग कर सांख्यिकीय सीखने के लिए पुस्तक परिचय से निम्नलिखित साजिश पुन: बनाने के लिए प्रयास कर रहा हूँ enter image description hereएक आकृति में कई अलग अलग भूखंडों साजिश Seaborn

मैं विशेष रूप से इस Seaborn के lmplot का उपयोग कर पहले दो भूखंडों बनाने के लिए पुन: बनाने के लिए चाहते हैं और दूसरा बनाने के लिए boxplot। मुख्य समस्या यह है कि lmplot के अनुसार facetgrid बनाता है जो मुझे बॉक्सप्लॉट के लिए हैकली रूप से एक और matplotlib axes जोड़ने के लिए मजबूर करता है। मैं सोच रहा था कि क्या इसे हासिल करने का एक आसान तरीका था। नीचे, मुझे वांछित साजिश प्राप्त करने के लिए मैन्युअल हेरफेर का थोड़ा सा करना है।

seaborn_grid = sns.lmplot('value', 'wage', col='variable', hue='education', data=df_melt, sharex=False) 
seaborn_grid.fig.set_figwidth(8) 

left, bottom, width, height = seaborn_grid.fig.axes[0]._position.bounds 
left2, bottom2, width2, height2 = seaborn_grid.fig.axes[1]._position.bounds 
left_diff = left2 - left 
seaborn_grid.fig.add_axes((left2 + left_diff, bottom, width, height)) 

sns.boxplot('education', 'wage', data=df_wage, ax = seaborn_grid.fig.axes[2]) 
ax2 = seaborn_grid.fig.axes[2] 
ax2.set_yticklabels([]) 
ax2.set_xticklabels(ax2.get_xmajorticklabels(), rotation=30) 
ax2.set_ylabel('') 
ax2.set_xlabel(''); 

leg = seaborn_grid.fig.legends[0] 
leg.set_bbox_to_anchor([0, .1, 1.5,1]) 

कौन सा DataFrames के लिए enter image description here

नमूना डेटा पैदावार:

df_melt = {'education': {0: '1. < HS Grad', 
    1: '4. College Grad', 
    2: '3. Some College', 
    3: '4. College Grad', 
    4: '2. HS Grad'}, 
'value': {0: 18, 1: 24, 2: 45, 3: 43, 4: 50}, 
'variable': {0: 'age', 1: 'age', 2: 'age', 3: 'age', 4: 'age'}, 
'wage': {0: 75.043154017351497, 
    1: 70.476019646944508, 
    2: 130.982177377461, 
    3: 154.68529299562999, 
    4: 75.043154017351497}} 

df_wage={'education': {0: '1. < HS Grad', 
    1: '4. College Grad', 
    2: '3. Some College', 
    3: '4. College Grad', 
    4: '2. HS Grad'}, 
'wage': {0: 75.043154017351497, 
    1: 70.476019646944508, 
    2: 130.982177377461, 
    3: 154.68529299562999, 
    4: 75.043154017351497}} 
+0

मुझे लगता है कि आप 'उपयोग करने के लिए PairGrid' चाहते हैं। – mwaskom

उत्तर

18

एक संभावना यह lmplot() का उपयोग नहीं करने के लिए हो सकता है, लेकिन इसके बजाय सीधे regplot() का उपयोग करें। regplot() अक्षों पर प्लॉट्स जिन्हें आप ax= के साथ तर्क के रूप में पास करते हैं।

आप एक निश्चित चर के अनुसार स्वचालित रूप से अपने डेटासेट को विभाजित करने की क्षमता खो देते हैं, लेकिन यदि आप पहले से ही उन प्लॉट्स को जानते हैं जिन्हें आप उत्पन्न करना चाहते हैं, तो यह कोई समस्या नहीं होनी चाहिए।

कुछ इस तरह:

fig, axs = plt.subplots(ncols=3) 
sns.regplot(x='value', y='wage', data=df_melt, ax=axs[0]) 
sns.regplot(x='value', y='wage', data=df_melt, ax=axs[1]) 
sns.boxplot(x='education',y='wage', data=df_melt, ax=axs[2]) 
+0

धन्यवाद, मुझे लगता है कि मैं एक और सामान्य समाधान की तलाश में था जिसने पहलू ग्रिड को भविष्य में अतिरिक्त साजिश के लिए अतिरिक्त खाली अक्ष को शामिल करने की अनुमति दी। Lmplot के साथ ऐसा करने का कोई तरीका नहीं हो सकता है। –

+6

चिंतन के एक वर्ष के बाद, मैं मानता हूं कि यह सबसे अच्छी विधि है। –

+0

यह काम करता है, मेरे पास एक प्रश्न संबंधित है, लेकिन अभी तक हल नहीं किया जा रहा है। क्या आप कृपया एक नज़र डालें, मुझे नहीं पता कि आपको निजी तौर पर संदेश कैसे भेजा जाए। Thanks.https: //stackoverflow.com/q/48225888/2525479 – StayFoolish

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