enter image description here

मैं एक स्टैक्ड बार चार्ट की प्रत्येक उप-राशि को उसके मानों के साथ एनोटेट करने का प्रयास कर रहा हूं जैसे ऊपर दिखाए गए चित्र (मान सटीक नहीं हैं, केवल एक उदाहरण)।

df.iloc[1:].T.plot(kind='bar', stacked=True)
plt.show()

डेटा फ्रेम जिसका मैंने उपयोग किया: यहां छवि विवरण दर्ज करें

लिंक की गई पोस्ट कुछ हद तक मेरे प्रश्न के समान है लेकिन मुझे उस उत्तर में दिए गए कोड को समझ में नहीं आया और न ही कोई स्पष्टीकरण दिया गया।

स्टैक्ड बार चार्ट में एनोटेटिंग मान Matplotlib

2
abc 12 सितंबर 2020, 03:48

1 उत्तर

सबसे बढ़िया उत्तर
  • डेटाफ़्रेम स्थानांतरित करें और फिर उपयोग करें pandas.DataFrame.plot.bar stacked=True के साथ।
  • एक ndarray एक matplotlib.axes.Axes प्रति कॉलम subplots=True के साथ। <उल>
  • इस आंकड़े के मामले में, ax.patches में 9 शामिल हैं matplotlib.patches.Rectangle ऑब्जेक्ट, प्रत्येक बार के प्रत्येक सेगमेंट के लिए एक। <उल>
  • इस ऑब्जेक्ट के लिए संबंधित विधियों का उपयोग करके, height, width, x, और y स्थानों को निकाला जा सकता है, और आयतों को एनोटेट करने के लिए उपयोग किया जा सकता है।< /ली>
  • इस प्रश्न का अंतर से है। शब्द गणना और कॉलम नाम के साथ एक स्टैक्ड बार चार्ट को कैसे एनोटेट करें? अन्य प्रश्न को लेबल के लिए वैकल्पिक टेक्स्ट निकालने और उपयोग करने की आवश्यकता है, और इस डेटाफ्रेम को स्थानांतरित करने की आवश्यकता है।
  • import pandas as pd
    import matplotlib.pyplot as plt
    
    data = {'var': ['TR', 'AC', 'F&B'], '2019 1Q': [6600, 1256, 588], '2019 2Q': [6566, 1309, 586], '2019 3Q': [7383, 1525, 673]}
    df = pd.DataFrame(data)
    df.set_index('var', inplace=True)
    
    # display(df)
         2019 1Q  2019 2Q  2019 3Q
    var                           
    TR      6600     6566     7383
    AC      1256     1309     1525
    F&B      588      586      673
    
    ax = df.T.plot.bar(stacked=True)
    plt.legend(title='Categories', bbox_to_anchor=(1.05, 1), loc='upper left')
    
    for i, rect in enumerate(ax.patches):
        # Find where everything is located
        height = rect.get_height()
        width = rect.get_width()
        x = rect.get_x()
        y = rect.get_y()
    
        # The height of the bar is the count value and can used as the label
        label_text = f'{height:.0f}'
    
        label_x = x + width / 2
        label_y = y + height / 2
    
        # don't include label if it's equivalently 0
        if height > 0.001:
            ax.text(label_x, label_y, label_text, ha='center', va='center', fontsize=8)
    

    enter image description here

    1
    Trenton McKinney 13 सितंबर 2020, 04:31