मुझे सबप्लॉट मैट्रिक्स में कई प्लॉट डालने में कुछ समस्याएं आ रही हैं।

मेरे पास निम्न कोड है:

import pandas as pd
import matplotlib.pyplot as plt

# Create features dataset
X = pd.DataFrame(columns=["feature1", "feature2"], 
                  data=[["A", "m"],
                        ["A", "m"],
                        ["A", "m"],
                        ["A", "m"],
                        ["A", "f"],
                        ["A", "f"],                         
                        ["B", "f"],
                        ["B", "f"],
                        ["B", "f"],
                        ["B", "x"],
                        ["B", "x"]])

# Create target dataset
target = pd.DataFrame(columns=["target"], 
                  data=[[0],
                        [0],
                        [0],
                        [1],
                        [1],
                        [1],                         
                        [1],
                        [1],
                        [0],
                        [0],
                        [0]])

plt.figure()
for i, feature_name in enumerate(X.columns):
    plt.subplot(2, 2, i+1)   #  2 by 2 subplot matrix
    df = pd.concat((X[[feature_name]], target), axis=1)
    df['counts'] = 1
    df_percentage = df.groupby([feature_name, 'target']).count()/df[[feature_name, 'counts']].groupby([feature_name]).count()*100   # calculate percentage
    df_percentage.reset_index(level=[feature_name, 'target']).pivot(index=feature_name, columns='target', values="counts").plot.bar(stacked=True, rot=0)   # plot stacked bar chart for each feature
    plt.ylabel('Percentage')
    plt.legend(['Target = 0', 'Target = 1'], loc='upper right')
    plt.tight_layout()

मैं 2 बार चार्ट को 2 बाय 2 सबप्लॉट मैट्रिक्स में प्लॉट करने की कोशिश कर रहा हूं। बार चार्ट आउटपुट वास्तव में अजीब है और यह ठीक से प्रदर्शित नहीं हो रहा है। यह 2 खाली भूखंडों को प्रदर्शित करता है जिसके बाद "फीचर 2" के लिए बार चार्ट एक के ऊपर एक प्रदर्शित होता है।

मुझे यकीन नहीं है कि मैं कहां गलत हो गया हूं। वास्तव में किसी भी मदद की सराहना करेंगे।

0
Leockl 12 सितंबर 2020, 12:27

1 उत्तर

सबसे बढ़िया उत्तर

मैंने इसे किसी तरह समझ लिया है:

plt.figure(figsize=(10,5))
for i, feature_name in enumerate(df_X_train[['ps_ind_01', 'ps_ind_02_cat', 'ps_ind_03', 'ps_ind_04_cat']].select_dtypes(include=['category']).columns):
    locals()['a'+str(i+1)] = plt.subplot(2, 3, i+1)
    df = pd.concat((df_X_train[[feature_name]], df_y_train), axis=1)
    df['counts'] = 1
    df_percentage = df.groupby([feature_name, 'target']).count()/df[[feature_name, 'counts']].groupby([feature_name]).count()*100
    df_percentage.reset_index(level=[feature_name, 'target']).pivot(index=feature_name, columns='target', values="counts").plot.bar(ax=locals()['a'+str(i+1)] , stacked=True, rot=0)       
    plt.ylabel('Percentage')
    plt.legend(['0', '1'], title='target', bbox_to_anchor=(1, 1), loc='upper left')
    plt.tight_layout()
0
Leockl 12 सितंबर 2020, 15:26