You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 06:36:20