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

如何创建双变量并列条形图?基于DataFrame实现小时维度对比

解决方案

1. 数据预处理

方式一:按小时直接聚合

先把hour转为字符串类型(作为分类变量),避免绘图时被当作连续数值处理,再按小时分组求和:

import pandas as pd

# 假设你的DataFrame名为df
df['hour'] = df['hour'].astype(str)
# 按小时聚合Victims和Deaths的总量
hourly_totals = df.groupby('hour')[['Victims', 'Deaths']].sum().reset_index()

方式二:按昼夜(Diurno/Nocturno)分组

先定义昼夜划分规则(比如白天Diurno为6-18点,夜间Nocturno为19-5点),再分组聚合:

# 添加昼夜分组列
df['day_night'] = pd.cut(df['hour'], 
                         bins=[-1,5,18,23], 
                         labels=['Nocturno', 'Diurno', 'Nocturno'])
# 按昼夜分组求和
day_night_totals = df.groupby('day_night')[['Victims', 'Deaths']].sum().reset_index()

2. 绘制分组柱状图

用Seaborn绘制类似目标样式的分组柱状图,每个类别(小时/昼夜)对应两个对比柱子:

import seaborn as sns
import matplotlib.pyplot as plt

# 设置绘图风格
sns.set_style("whitegrid")

# 选择用小时维度数据,若用昼夜则替换为day_night_totals
plot_data = hourly_totals.melt(id_vars='hour', var_name='Metric', value_name='Total')

# 绘制分组柱状图
plt.figure(figsize=(12,6))
sns.barplot(x='hour', y='Total', hue='Metric', data=plot_data, palette='Set2')

# 添加标题和标签
plt.title('每小时受害者与死亡数总量对比', fontsize=14)
plt.xlabel('小时', fontsize=12)
plt.ylabel('总量', fontsize=12)
plt.legend(title='指标')
plt.show()

关键说明

  • 将hour转为字符串是为了让它作为离散分类变量,确保绘图时只显示存在的小时值
  • 使用melt函数把宽表转为长表,适配Seaborn分组柱状图的输入格式
  • 若要调整样式,可修改palette(颜色)、figsize(图表尺寸)等参数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 15:15:38