如何解决如何使用matplotlib中的分类数据创建饼图?
我的数据如下:
ID Gender Country ...
1 Male UK
2 Female US
3 Male NZ
4 Female UK
...
只有2个性别选项和3个国家选项。我想为“性别”和“国家/地区”分别创建一个饼图,以显示每个选项在数据中出现的次数,但是我对此却很困惑。
数据存储在熊猫数据框中。
非常感谢所有帮助!
解决方法
以下是使用pandas的方法:
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
def label_function(val):
return f'{val / 100 * len(df):.0f}\n{val:.0f}%'
N = 50
df = pd.DataFrame({'country': np.random.choice(['UK','US','NZ'],N),'gender': np.random.choice(['Male','Female'],N)})
fig,(ax1,ax2) = plt.subplots(ncols=2,figsize=(10,5))
df.groupby('country').size().plot(kind='pie',autopct=label_function,textprops={'fontsize': 20},colors=['tomato','gold','skyblue'],ax=ax1)
df.groupby('gender').size().plot(kind='pie',colors=['violet','lime'],ax=ax2)
ax1.set_ylabel('Per country',size=22)
ax2.set_ylabel('Per gender',size=22)plt.tight_layout()
plt.show()
PS:仅显示百分比,请使用autopct='%1.0f%%'
。
好的,因为您使用的是这样的数据框:
data = pd.DataFrame([[1,'Male','UK'],[2,'Female',[3,[4,'US']],columns=['ID','Gender','Country'])
您真的可以这样做:
data['Gender'].value_counts().plot(kind='pie')
如果您想手动进行:
people = len(data.Gender)
genders = len(set(data.Gender))
res = []
for gender in set(data.Gender):
res.append([gender,len(data[data['Gender']==gender]),len(data[data['Gender']==gender])/people])
然后将其绘制。
,我想你是从这个开始的
import pandas as pd
from matplotlib.pyplot import pie,axis,show
df = pd.DataFrame([[1,'Country'])
性别图
df.groupby('gender').size().plot(kind='pie',autopct='%.2f')
国家图
df.groupby('country').size().plot(kind='pie',autopct='%.2f')
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。