使用Plotly绘制跨日期多标识符的分组堆叠条形图
Plotly 分日期分传感器堆叠条形图实现方案
你需要的是分组+堆叠组合型条形图,不需要复杂自定义开发,按以下步骤实现即可:
1. 数据预处理
原始数据的date_time是分钟级时间戳,首先要提取日期维度做一级分组,再按「日期、传感器ID、u_code」三个维度聚合统计计数,作为条形的高度值:
import pandas as pd import plotly.express as px # 转换时间格式,提取纯日期字段 df['date_time'] = pd.to_datetime(df['date_time'], format='%d-%m-%Y %H:%M') df['date'] = df['date_time'].dt.date.astype(str) # 聚合统计各维度下的记录数 plot_df = df.groupby(['date', 'sensor_id', 'u_code'], as_index=False)['u_code'].count().rename(columns={'u_code':'record_cnt'})
2. 绘图核心代码
调用Plotly Express条形图接口,通过多层x轴分类实现日期大分组、传感器子分组,再开启堆叠模式即可:
fig = px.bar( plot_df, # x轴传两层分类:第一层为日期(大组),第二层为传感器ID(同日期下的独立柱) x=[plot_df['date'], plot_df['sensor_id']], y='record_cnt', color='u_code', # 按u_code区分堆叠层颜色 barmode='stack',# 同传感器下的u_code数值堆叠展示 hover_data=['sensor_id', 'u_code', 'record_cnt'] # 自定义悬浮提示内容 ) # 调整布局优化展示效果 fig.update_layout( xaxis_title='统计日期/传感器ID', yaxis_title='记录数量', bargap=0.35, # 不同日期大分组之间的间距 bargroupgap=0.1, # 同日期下不同传感器柱之间的间距 legend_title='u_code类型' ) fig.show()
可调参数说明
- 如果不需要双层x轴标签,可以手动更新x轴刻度文本,把传感器ID和日期合并为单标签显示
- 自定义配色可传入
color_discrete_map参数,指定每个u_code对应的显示颜色 - 调整柱宽度、间距直接修改
bargap和bargroupgap的数值即可,数值越大间距越宽 - 生成的图表默认保留Plotly所有交互能力:点击图例可筛选显示指定u_code、支持区域缩放、图片导出等操作
内容的提问来源于stack exchange,提问作者aj7amigo
相关产品推荐
相关产品推荐

