Matplotlib Pie Graph with 'All Other Categories"

后端 未结 1 606
心在旅途
心在旅途 2020-12-18 07:23

I have created a matplotlib pie chart:

df.plot(kind=\'pie\', subplots=True, figsize=(6, 4))

My dataframe consists of two columns - Country

相关标签:
1条回答
  • 2020-12-18 08:16

    As already stated in the comments, the best way to do this is probably to do the manipulations before plotting. Here's a way how to do it:

    import pandas as pd
    from matplotlib import pyplot as plt
    import numpy as np
    
    countries = [
            'Albania',
            'Brazil',
            'Denmark',
            'France',
            'Mexico',
            'Nigeria',
            'Spain',
            'Germany',
            'Finland',
        ]
    
    #the full dataframe
    df = pd.DataFrame(
        data = {'country': countries, 'value' :np.random.rand(len(countries))},
        ).sort_values('value', ascending = False)
    
    #the top 5
    df2 = df[:5].copy()
    
    #others
    new_row = pd.DataFrame(data = {
        'country' : ['others'],
        'value' : [df['value'][5:].sum()]
    })
    
    #combining top 5 with others
    df2 = pd.concat([df2, new_row])
    
    #plotting -- for comparison left all countries and right 
    #the others combined
    fig, axes = plt.subplots(nrows = 1, ncols = 2, figsize = (9,4))
    df.plot(kind = 'pie', y = 'value', labels = df['country'], ax = axes[0])
    df2.plot(kind = 'pie', y = 'value', labels = df2['country'], ax = axes[1])
    axes[0].set_title('all countries')
    axes[1].set_title('top 5')
    plt.show()
    

    The result looks like this.

    Hope this helps.

    0 讨论(0)
提交回复
热议问题