我的data分如下:

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))

ymdhms表示年、月、日、小时、分钟和秒.例如,2023030ymdhms0000`表示2023年3月1日00:00:00.

ymdhms的值为10秒时间间隔.对于switch列,1表示switch 接通,0表示switch 断开. 我想要做的是绘制powerymdhms的关系图. 所以y轴应该是power,x轴应该是时间.我希望x轴表示时间顺序,并且只表示经过了多少秒.我还想在视觉上区分switch是开着还是关着.如果switch关闭,我想将该区域涂成红色.如果switch打开,我想将该区域涂成绿色.

你能推荐一种很好的方式来想象我想要做什么吗?

推荐答案

我可以试着画一张简单的线条图.

首先,加载所需的包

library(ggplot2)
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))

接下来,将日期-时间数据转换为POSIXct格式

# ymdhms to POSIXct
data$timestamp <- ymd_hms(data$ymdhms)

接下来,创建一个状态‘Switch’.这将有助于为绘图中的数据上色

# status variable 
data$switchStatus <- ifelse(data$switch == 1, "on", "off")

最后,根据数据绘制曲线图

# plot
ggplot(data, aes(x = timestamp, y = power, color = switchStatus)) +
  geom_line() +
  geom_rect(aes(xmin = lag(timestamp, default = first(timestamp)),
                xmax = timestamp, ymin = -Inf, ymax = Inf,
                fill = switchStatus), alpha = 0.2, inherit.aes = FALSE) +
  scale_fill_manual(values = c("red", "green")) +
  xlab("Time (seconds)") + ylab("Power") +
  theme_classic()

这将产生如下所示的结果:

enter image description here

如果您愿意,您还可以绘制step chart等变量.

让我知道这是否有帮助.

步骤图:

# step chart
ggplot(data, aes(x = timestamp, y = power, group = 1)) +
  geom_step(aes(color = factor(switch)), direction = "hv") +
  scale_color_manual(values = c("red", "green")) +
  labs(x = "Time", y = "Power", color = "Switch")

enter image description here

R相关问答推荐

geom_raster不适用于x比例中超过2,15的值

在ggplot Likert条中添加水平线

按R中的组查找相邻列的行累积和的最大值

terra nearest()仅为所有`to_id`列返回NA

在R中替换函数中的特定符号

S用事件解决物质平衡问题

使用across,starts_with和ifelse语句变更多个变量

将饼图插入条形图

`lazy_dt`不支持`dplyr/across`?

以字符格式导入的ExcelElectron 表格日期列标题

如何从向量构造一系列双边公式

如何移除GGPlot中超出与面相交的任何格网像元

如何对r中包含特定(未知)文本的行求和?

访问数据帧中未定义的列时出现R错误

如何根据其他列中的两个条件来计算数据帧中的行之间的差异?

如何获取R chromote中的当前URL?

roxygen2正在处理太多的文件

如何将字符类对象中的数据转换为R中的字符串

识别部分重复行,其中一行为NA,其重复行为非NA

如何在R曲线图弹出窗口中更改r和theta标签