如何用Python绘制需从原始数据计算统计量的分年龄情绪分组柱状图
解决方案
你可以借助pandas完成数据统计,再结合matplotlib绘图,无需提前在CSV中预生成统计列,具体步骤如下:
1. 安装依赖
如果还没安装对应的库,执行以下命令安装:pip install pandas matplotlib
2. 读取并统计数据
使用pandas的交叉表功能可以直接按「年龄+情绪」两个维度自动统计对应人数:
import pandas as pd import matplotlib.pyplot as plt # 读取CSV文件,替换为你自己的文件路径 df = pd.read_csv("survey.csv") # 生成年龄为行、情绪类型为列的人数统计结果 count_df = pd.crosstab(index=df["Age"], columns=df["Mood level"]) # 可选:补全0-100全量年龄,无受访者的年龄对应人数填充为0 count_df = count_df.reindex(range(0, 101), fill_value=0) # 重命名列,方便后续图例显示 count_df = count_df.rename(columns={ 0: "开心", 1: "一般", 2: "难过" })
3. 绘制分组柱状图
直接基于统计完成的DataFrame绘图即可,自动实现每个年龄对应3根柱子的效果:
# 设置画布尺寸 plt.figure(figsize=(18, 6)) # 绘制分组柱状图 count_df.plot(kind="bar", width=0.7, ax=plt.gca()) # 优化图表显示 plt.xlabel("年龄", fontsize=12) plt.ylabel("人数", fontsize=12) plt.title("各年龄人群情绪分布统计", fontsize=14) # 调整X轴刻度,每5岁显示一个,避免标签重叠 plt.xticks(ticks=range(0, 101, 5), labels=range(0, 101, 5), rotation=0) plt.legend(title="情绪类型") # 自动调整布局避免内容被截断 plt.tight_layout() plt.show()
如果不需要展示无受访者的年龄,删除reindex那一行代码即可,X轴会自动仅显示有数据的年龄。
内容的提问来源于stack exchange,提问作者userj
相关产品推荐
相关产品推荐

