如何在Pandas中基于df.groupby('battery').weight.mean()的结果创建折线图以对比电池尺寸与平均重量?
嘿,作为Python新手能想到用groupby做聚合再可视化,已经迈出很棒的一步啦!我来一步步教你怎么实现这个对比电池尺寸与平均重量的折线图,方法很简单,咱们分步骤来:
第一步:导入必要的库
首先得确保你已经导入了pandas和绘图用的库,比如matplotlib(最常用的基础绘图库),如果想用更美观的seaborn也可以:
import pandas as pd import matplotlib.pyplot as plt # 如果想用seaborn的话,再加这行 # import seaborn as sns
第二步:准备/确认你的数据
先给你一个示例数据,方便你测试(你可以替换成自己的真实数据):
data = { 'battery': ['AA', 'AA', 'AAA', 'AAA', 'AAA', 'C', 'C', 'D'], 'weight': [23, 25, 11, 10, 12, 60, 62, 135] } df = pd.DataFrame(data)
第三步:计算每个电池的平均重量
就是你已经写的那行代码,它会返回一个Series,索引是电池尺寸,值是对应的平均重量:
# 计算每个电池尺寸的平均重量 battery_mean_weight = df.groupby('battery').weight.mean() # 可以先打印看看结果是否符合预期 print(battery_mean_weight) # 输出大概是: # battery # AA 24.0 # AAA 11.0 # C 61.0 # D 135.0 # Name: weight, dtype: float64
第四步:绘制折线图
这里给你三种常用的方法,选你觉得顺手的就行:
方法1:用pandas自带的plot(最简单)
pandas的Series/DataFrame自带plot方法,一行代码就能搞定绘图,非常适合新手:
# 绘制折线图,marker='o'是给每个数据点加个圆点标记,更清晰 battery_mean_weight.plot(kind='line', marker='o', figsize=(8, 5)) # 给图表加标题和坐标轴标签,让别人能看懂 plt.title('Average Weight by Battery Size') plt.xlabel('Battery Size') plt.ylabel('Average Weight (g)') plt.grid(True) # 可选,添加网格线更易读 # 显示图表 plt.show()
方法2:用matplotlib手动绘制(更灵活)
如果你想自定义更多细节(比如颜色、线条样式),可以用matplotlib手动绘制:
# 提取x轴(电池尺寸)和y轴(平均重量)的数据 x = battery_mean_weight.index y = battery_mean_weight.values # 创建画布和子图 fig, ax = plt.subplots(figsize=(8, 5)) # 绘制折线图,自定义颜色和线条样式 ax.plot(x, y, marker='o', linestyle='-', color='darkblue', linewidth=2) # 设置标题和标签,还能调整字体大小 ax.set_title('Average Weight by Battery Size', fontsize=12) ax.set_xlabel('Battery Size', fontsize=10) ax.set_ylabel('Average Weight (g)', fontsize=10) # 添加半透明网格线 ax.grid(alpha=0.3) # 显示图表 plt.show()
方法3:用seaborn绘制(更美观)
如果你想要更精致的图表样式,可以用seaborn,不过需要先把Series转成DataFrame:
# 把聚合结果转成DataFrame,方便seaborn使用 battery_df = battery_mean_weight.reset_index(name='avg_weight') # 用seaborn绘制折线图 sns.lineplot(data=battery_df, x='battery', y='avg_weight', marker='o', color='green') # 添加标题和标签 plt.title('Average Weight by Battery Size') plt.xlabel('Battery Size') plt.ylabel('Average Weight (g)') plt.grid(True) # 显示图表 plt.show()
小提示:调整x轴顺序让图表更合理
注意:如果你的真实数据里电池尺寸的顺序不是逻辑从小到大(比如AAA→AA→C→D),可以手动调整索引顺序,让折线图更直观:
# 手动指定你想要的电池尺寸顺序 desired_order = ['AAA', 'AA', 'C', 'D'] battery_mean_weight = battery_mean_weight.reindex(desired_order) # 再用上面的方法绘图,x轴就会按你指定的顺序排列啦
如果还有其他问题,随时问哦!
内容的提问来源于stack exchange,提问作者Nuwan Fernando
相关产品推荐
相关产品推荐

