python之Matplotlib 饼图与 'All Other Categories"

pengyingh 阅读:67 2024-07-26 13:47:55 评论:0

我创建了一个 matplotlib 饼图:

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

我的数据框由两列组成 - Country 和 Value(% 分布),并列出了大约 25 个国家/地区。我只想按值(按最高百分比)绘制前 10 个国家/地区,并在图中计算其余国家/地区的百分比值并将其命名为“所有其他国家/地区”。如何使用 matplotlib 使用 .plot 函数执行此操作?
Country   Value 
Albania    4% 
Brazil     3% 
Denmark    5% 
France     10% 
Mexico     3% 
Nigeria    15% 
Spain      4% 
U.S.       5% 

请您参考如下方法:

正如评论中已经指出的那样,最好的方法可能是在绘图之前进行操作。这是一种方法:

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() 

结果看起来像这样。



希望这可以帮助。


标签:Python
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号