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

如何基于多传感器列数据创建分传感器的行/柱/饼统计图表?

解决多列传感器数据的分组统计可视化问题

我懂你的困扰——很多可视化示例都是盯着单一列做分析,但你要的是把多列传感器数据(比如sensor1、sensor2、sensor3)按传感器维度拆分,生成对应统计指标(计数、平均值)的行图、柱状图或饼图,每个行/柱/扇区对应一个传感器。其实核心步骤是把宽格式数据转成长格式,之后不管用代码还是可视化工具都能轻松实现,下面分两种场景给你具体方案:

一、用Python(Pandas + Matplotlib/Seaborn)实现

1. 先把宽格式数据转成长格式

你的原始数据是“每列对应一个传感器”的宽格式,我们需要把它转成“每行对应一个传感器的一条记录”的长格式——这是解决问题的关键。用Pandas的melt函数就能快速完成:

import pandas as pd
import matplotlib.pyplot as plt

# 模拟你的传感器数据(替换成你真实的数据即可)
raw_data = pd.DataFrame({
    'time': pd.date_range(start='2024-01-01', periods=10, freq='H'),
    'sensor1': [12, 15, 13, 14, 16, 15, 17, 14, 13, 15],
    'sensor2': [22, 25, 23, 24, 26, 25, 27, 24, 23, 25],
    'sensor3': [32, 35, 33, 34, 36, 35, 37, 34, 33, 35]
})

# 宽转长:把sensor1/sensor2/sensor3转成一个分组列'sensor',数值统一放到'reading'列
melted_data = raw_data.melt(
    id_vars=['time'],  # 保留不需要转换的列(比如时间)
    var_name='sensor',  # 新的分组列名称
    value_name='reading'  # 统一的数值列名称
)

2. 统计各传感器的指标

转成长格式后,就能按sensor分组统计平均值、计数了:

sensor_stats = melted_data.groupby('sensor').agg(
    average_reading=('reading', 'mean'),
    reading_count=('reading', 'count')
).reset_index()

3. 生成各类图表

柱状图(展示平均值/计数)

# 平均值柱状图
plt.figure(figsize=(8, 5))
plt.bar(sensor_stats['sensor'], sensor_stats['average_reading'], color='skyblue')
plt.title('Average Reading by Sensor')
plt.xlabel('Sensor')
plt.ylabel('Average Reading')
plt.tight_layout()
plt.show()

# 计数柱状图(如果有缺失值,计数会有差异)
plt.figure(figsize=(8, 5))
plt.bar(sensor_stats['sensor'], sensor_stats['reading_count'], color='salmon')
plt.title('Number of Valid Readings by Sensor')
plt.xlabel('Sensor')
plt.ylabel('Count')
plt.tight_layout()
plt.show()

行图(展示传感器统计值的对比趋势)

plt.figure(figsize=(8, 5))
plt.plot(sensor_stats['sensor'], sensor_stats['average_reading'], marker='o', linestyle='-', color='darkgreen')
plt.title('Average Reading Trend Across Sensors')
plt.xlabel('Sensor')
plt.ylabel('Average Reading')
plt.grid(axis='y', linestyle='--', alpha=0.7)
plt.tight_layout()
plt.show()

饼图(展示读数占比)

plt.figure(figsize=(8, 8))
plt.pie(
    sensor_stats['reading_count'],
    labels=sensor_stats['sensor'],
    autopct='%1.1f%%',
    colors=['#ff9999','#66b3ff','#99ff99']
)
plt.title('Proportion of Valid Readings by Sensor')
plt.show()

二、用Tableau等可视化工具实现

如果不想写代码,用Tableau也能快速实现:

  • 导入你的数据后,找到sensor1、sensor2、sensor3这些列,右键选择**"转换为度量"**
  • 把**"度量名称"拖到列/行(比如做柱状图就拖到列),把"平均值(读数)"或"计数(读数)"**拖到标记卡的“行”位置
  • 此时图表会自动按每个传感器生成对应的柱/行/扇区,你可以直接调整样式、添加标题等

关键总结

不管用哪种方式,核心都是把宽格式数据转成长格式——因为大多数可视化工具/库都是基于“分组字段+数值字段”的结构来生成多元素的图表,你的原始数据把传感器信息存在了列名里,转成单独的分组列后,统计和可视化就都顺理成章了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:13:58