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

按开关状态双颜色可视化功率随时间变化的绘图需求

基于R的可视化方案

以下是用ggplot2实现需求的完整代码,分为数据预处理和绘图两部分:

1. 数据预处理

首先需要把原始的ymdhms字段转换为标准时间格式,再计算从初始时间开始流逝的秒数;同时为了绘制连续的状态背景色块,需要生成每个开关状态对应的时间区间:

library(ggplot2)
library(dplyr)
library(lubridate)

# 加载数据
data <- data.frame(ymdhms=c(20230301000000,20230301000010,20230301000020,20230301000030,20230301000040,
                          20230301000050,20230301000100,20230301000110),
                 switch=c(0,0,0,1,0,0,1,0),
                 power=c(20,21,22,23,20,19,29,28))

# 转换时间格式并计算流逝秒数
data <- data %>%
  mutate(datetime = ymd_hms(as.character(ymdhms)),
         elapsed_sec = as.numeric(difftime(datetime, first(datetime), units = "secs")))

# 生成状态区间数据(用于绘制背景色块)
state_intervals <- data %>%
  mutate(group = cumsum(switch != lag(switch, default = first(switch)))) %>%
  group_by(group, switch) %>%
  summarise(start_sec = min(elapsed_sec),
            end_sec = max(elapsed_sec) + 10,  # 加上数据间隔,让色块覆盖到下一个时间点
            .groups = "drop") %>%
  mutate(fill_color = ifelse(switch == 1, "#7ccd7c", "#ff6b6b"))  # 绿色=开关开启,红色=开关关闭

2. 绘制可视化图表

先绘制背景的状态色块,再叠加功率的折线和数据点,确保横轴显示流逝秒数,纵轴为功率值:

ggplot() +
  # 绘制状态背景色块
  geom_rect(data = state_intervals,
            aes(xmin = start_sec, xmax = end_sec,
                ymin = -Inf, ymax = Inf, fill = fill_color),
            alpha = 0.2) +
  # 绘制功率折线和数据点
  geom_line(data = data, aes(x = elapsed_sec, y = power), color = "black", linewidth = 1) +
  geom_point(data = data, aes(x = elapsed_sec, y = power), size = 3, color = "darkblue") +
  # 设置坐标轴标签和主题
  labs(x = "已流逝秒数", y = "功率(power)", title = "功率随时间变化及开关状态") +
  scale_fill_identity() +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5))

代码说明

  • 数据预处理部分:用ymd_hms把字符型时间串转为标准时间格式,通过difftime计算流逝秒数;通过分组识别连续的开关状态,生成每个状态对应的时间区间,保证背景色块是连续的。
  • 绘图部分:geom_rect绘制覆盖整个纵轴的背景色块,设置透明度避免遮挡折线;geom_line和geom_point分别呈现功率的变化趋势和具体数据点;scale_fill_identity直接使用我们定义的颜色值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 23:02:18