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

如何使用groupby遍历列,为每个机器生成speed、Temp对应柱状图

实现方案

核心思路

通过groupby('machine')按机器拆分数据集,每台机器单独遍历需要绘图的指标列生成对应柱状图,同时优化内存占用避免大量绘图导致的程序崩溃。

完整代码

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

# ---------------------- 以下是测试数据生成,自有数据场景可跳过这部分 ----------------------
bins = [f'({n*200}, {(n+1)*200}]' for _ in range(50) for n in range(109)]
machines = [f'machine_{n}' for n in range(50) for _ in range(109)]
np.random.seed(365)
speed = np.random.randint(0, 40, size=len(machines))
temp = np.random.choice([0, 30, 70], size=len(machines))
df = pd.DataFrame({'machine': machines, 'bin': bins, 'speed': speed, 'Temp': temp})
# ---------------------- 测试数据生成结束 ----------------------

# 定义需要绘图的指标列
plot_cols = ['speed', 'Temp']
sns.set(style="ticks")

# 按机器分组迭代
for machine_name, group_df in df.groupby('machine'):
    # 遍历每个指标生成对应图表
    for col in plot_cols:
        fig, ax = plt.subplots(figsize=(22, 14))
        sns.barplot(x='bin', y=col, data=group_df, ax=ax)
        # 配置图表样式
        ax.set_title(f'{machine_name} {col} 分布', fontsize=18)
        plt.xlabel('bin区间', fontsize=14)
        plt.ylabel(col, fontsize=14)
        # x轴标签旋转90度避免重叠
        plt.xticks(rotation=90, fontsize=10)
        sns.despine(offset=10, trim=True)
        # 可选:保存图片到本地,替换为你自己的保存路径
        plt.savefig(f'./{machine_name}_{col}.png', dpi=120, bbox_inches='tight')
        # 关闭画布释放内存,批量绘图必须加
        plt.close()

注意事项

  • 如果你用的是第一个样例数据,存在machine_a写成machine a的拼写不一致问题,先清洗数据再分组:
    df['machine'] = df['machine'].str.replace(' ', '_')
    
  • 可以根据实际需求调整图表尺寸、字体大小、dpi等参数,不需要保存图片的话可以去掉plt.savefig行,替换为plt.show()即可。

内容的提问来源于stack exchange,提问作者Sam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 20:15:04