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

Seaborn如何循环绘制分类列不同取值对应的直方图子图

原代码问题点
  • 直接遍历DataFrame对象时,默认迭代的是列名,不会按Operator字段自动拆分分组,循环拿到的内容和预期的分组数据完全不符
  • plt.subplot()的第三个参数要求是从1开始的整数位置索引,原代码用字符串切片做数值计算逻辑完全错误,会直接触发类型报错
  • 单个子图仅需展示对应Operator的delay分布,不需要设置hue='Operator'参数,否则会重复绘制全量数据的分组结果
可直接运行的正确实现
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# 构造测试数据集
data = {
    'Operator':['AB','BC','DE','FG','AB','AB','DE','BC','BC','BC','BC'], 
    'delay': [22000,25000,27000,35000, 4567, 1893,15373,987,354,1,15]
}
data = pd.DataFrame(data)

# 固定子图展示顺序,和要求的AB、BC、DE、FG对应
operator_list = ['AB', 'BC', 'DE', 'FG']

plt.figure(figsize=(15,10))
for idx, op_name in enumerate(operator_list):
    # 筛选当前运营商对应的子集数据
    current_data = data[data['Operator'] == op_name]
    # 创建2行2列布局的子图,位置索引从1开始
    plt.subplot(2, 2, idx + 1)
    # 绘制当前分组的delay分布直方图
    sns.histplot(data=current_data, x='delay')
    # 设置子图标题
    plt.title(f'Operator {op_name} 延迟分布')

# 自动调整子图间距,避免标签重叠
plt.tight_layout()
plt.show()
补充说明
  • 如果需要在直方图上叠加核密度估计曲线,可以给sns.histplot()加上kde=True参数
  • 如果需要调整分箱数量,可以加bins=参数值自定义
  • 可以根据需要给每个子图单独设置x轴、y轴标签,调整字体大小等样式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 16:15:33