मेरे पास डेटाफ्रेम से एक कोड है

Y = df['label']
for col in categorical_cols:
    tab = pd.crosstab(df[col],Y)
    annot = x.div(x.sum(axis=1).astype('float64'),axis=0)
    annot.plot(kind='bar',stacked=True)
    plt.title('Distribution of %s'%col)
    plt.xlabel('%s'%col,size='x-large')
    plt.xticks(rotation=45)
    plt.legend()

मैं एक figure में अलग-अलग सबप्लॉट का उपयोग करके इन्हें कैसे प्लॉट कर सकता हूं क्योंकि यह लूप अंतिम कॉलम के आंकड़े को प्रिंट करता है। तो सभी आंकड़े समान हैं।

इसके अलावा: मैं matplotlib/seaborn का उपयोग करके matplotlib का उपयोग करके इसे कैसे उत्पन्न कर सकता हूं जो मुझे% या पूर्ण मान दिखाता है।

1
Deshwal 14 जिंदा 2020, 14:03

1 उत्तर

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

आपको अलग-अलग सबप्लॉट बनाने होंगे और फिर ax कीवर्ड के माध्यम से annot.plot की प्रत्येक कॉल पर एक axes ऑब्जेक्ट पास करना होगा, कुछ इस तरह:

import math
import matplotlib.pyplot as plt

n = len(categorical_cols)
nrows = math.ceil(float(n) / 3.0)
fig, ax = plt.subplots(ncols=3, nrows=nrows, figsize=(9, nrows*3))
ax = ax.flatten()

Y = df['label']
for idx, col in enumerate(categorical_cols):
    tab = pd.crosstab(df[col],Y)
    annot = x.div(x.sum(axis=1).astype('float64'),axis=0)
    annot.plot(kind='bar',stacked=True, ax=ax[idx])
    ax[idx].title('Distribution of %s'%col)
    ax[idx].set_xlabel('%s'%col,size='x-large')
    ax.tick_params('x', labelrotation=45)
    plt.legend()
1
William Miller 15 जिंदा 2020, 03:14