如何使用Pandas绘制细分饼图展示自变量与因变量的关系?
实现嵌套饼图(细分饼图)展示定性变量关系
你提到的“细分饼图”标准名称是嵌套饼图(Nested Pie Chart),也可通过旭日图(Sunburst Chart)实现类似分层展示效果。以下是基于你的DataFrame的具体实现方案:
方法一:Matplotlib 绘制嵌套饼图
先对数据做统计聚合,再通过双层饼图实现分层展示:
import pandas as pd import matplotlib.pyplot as plt # 构建DataFrame data = {'Gender': ['m','m','m','f','m','f','m','f','f','f','f','m','m'], 'Favorite character':['Jim','Jim','Pam','Jim','Pam','Jim','Jim','Jim','Pam','Pam','Jim','Jim','Pam' ]} df = pd.DataFrame(data) # 统计每个性别下的角色偏好数量 gender_char_counts = df.groupby(['Gender', 'Favorite character']).size().unstack() # 统计每个性别的总人数 gender_total = df['Gender'].value_counts() # 外层饼图(性别占比) outer_sizes = gender_total.values outer_labels = ['男性', '女性'] # 替换为中文标签更直观 # 内层饼图(各性别下的角色偏好占比) inner_sizes = gender_char_counts.values.flatten() inner_labels = [f'男性\n吉姆', '男性\n帕姆', '女性\n吉姆', '女性\n帕姆'] # 对应分组的中文标签 # 绘制嵌套饼图 fig, ax = plt.subplots(figsize=(6,6)) # 外层饼图,设置宽度形成环形 ax.pie(outer_sizes, labels=outer_labels, radius=1, wedgeprops=dict(width=0.3, edgecolor='white')) # 内层饼图,半径更小,嵌入环形内 ax.pie(inner_sizes, labels=inner_labels, radius=0.7, wedgeprops=dict(width=0.3, edgecolor='white')) # 保证饼图为正圆形 ax.set_aspect('equal') plt.title('性别与偏好角色分布') plt.show()
方法二:Plotly 绘制旭日图(更直观的分层展示)
旭日图是嵌套饼图的进阶形式,能更清晰展示层级关系:
import pandas as pd import plotly.express as px # 构建DataFrame data = {'Gender': ['m','m','m','f','m','f','m','f','f','f','f','m','m'], 'Favorite character':['Jim','Jim','Pam','Jim','Pam','Jim','Jim','Jim','Pam','Pam','Jim','Jim','Pam' ]} df = pd.DataFrame(data) # 转换为适合旭日图的长格式数据 df_agg = df.groupby(['Gender', 'Favorite character']).size().reset_index(name='人数') # 替换英文标签为中文 df_agg['Gender'] = df_agg['Gender'].replace({'m':'男性', 'f':'女性'}) df_agg['Favorite character'] = df_agg['Favorite character'].replace({'Jim':'吉姆', 'Pam':'帕姆'}) # 绘制旭日图 fig = px.sunburst(df_agg, path=['Gender', 'Favorite character'], values='人数', title='性别与偏好角色分层分布') fig.show()
查阅资料方向
- Matplotlib 官方文档:搜索「Nested Pie Charts」,可找到官方示例代码与参数说明
- Plotly 官方文档:搜索「Sunburst Charts」,有详细的分层可视化教程
- Pandas 可视化文档:结合 Pandas 的
groupby、value_counts等聚合方法,搭配Matplotlib/Plotly实现统计可视化
内容的提问来源于stack exchange,提问作者Hyppolite
相关产品推荐
相关产品推荐

