Python如何使用plotly.express绘制单列数据频率饼图
单分类列频率统计Plotly绘图方案
不需要额外做透视表,用pandas原生方法就能快速拿到可直接传入Plotly的统计结果,全程不需要依赖matplotlib。
- 频率统计(替代透视表的最简方法)
用value_counts()直接统计目标列的取值出现次数,结果默认会把分类值放在索引、计数作为值,只要用reset_index()就能转成Plotly可识别的普通二维表结构:
import pandas as pd import plotly.express as px # 替换成你自己的DataFrame变量名和列名 df = pd.DataFrame({'Cars': ['FORD', 'FORD', 'BMW', 'GMC', 'GMC', 'GMC', 'GMC']}) # 统计频次,转成普通列结构 count_res = df['Cars'].value_counts(dropna=False).reset_index() count_res.columns = ['car_brand', 'total'] # 重命名列方便识别
如果你之前已经用透视表生成了统计结果,读不到列标签是因为透视表默认会把分组字段设为索引,不是普通列,只要执行你的透视表变量.reset_index()就能把分组标签转成普通列,再重命名下列即可使用。
- 绘制饼图
直接传入统计好的表,指定名称列和数值列即可:
fig = px.pie( count_res, names='car_brand', values='total', title='各品牌汽车数量占比' ) fig.show()
- 适配多分类场景的替代图表
如果列的取值分类超过6个,饼图会出现标签拥挤、占比辨识度低的问题,更推荐用条形图做频率对比:
fig = px.bar( count_res, x='car_brand', y='total', text_auto=True, # 柱子上直接显示数值 title='各品牌汽车数量统计' ) fig.show()
小提示:
value_counts()默认会自动忽略空值,如果需要把空值也纳入统计,加上参数dropna=False即可。
内容的提问来源于stack exchange,提问作者MasterGG
相关产品推荐
相关产品推荐

