具有“所有其他类别"的Matplotlib饼图; [英] Matplotlib Pie Graph with 'All Other Categories"
问题描述
我创建了一个matplotlib饼图:
I have created a matplotlib pie chart:
df.plot(kind='pie', subplots=True, figsize=(6, 4))
我的数据框由两列组成-国家和价值(分布百分比),列出了大约25个国家/地区.我只想按值(按最高百分比)绘制前10个国家/地区,并在该图内计算其余国家/地区的百分比值,并将其命名为所有其他国家/地区".如何通过.plot函数使用matplotlib做到这一点?
My dataframe consists of two columns - Country and Value (% distribution) and has about 25 countries listed. I would like to only plot the top 10 countries by values (by highest %) and within the plot, calculate the remaining countries % value and give it the title of 'All Other Countries'. How do I do this using matplotlib using the .plot function?
Country Value
Albania 4%
Brazil 3%
Denmark 5%
France 10%
Mexico 3%
Nigeria 15%
Spain 4%
U.S. 5%
推荐答案
如注释中所述,最好的方法可能是在绘制之前进行操作.这是一种方法:
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()
结果看起来像这样.
希望这会有所帮助.
这篇关于具有“所有其他类别"的Matplotlib饼图;的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!