我目前正在做一些温度/时间的绘图。我通过加热器的开/关状态为数据点着色。在较大的时间比例上进行绘制时,这些点开始融合在一起,并且这些点的正弦形图案变得模糊。如果我在plot()调用中设置了type = 'l'
,则这种模式会更加清晰,但这不允许我按加热器状态进行着色。
是否有一种方法可以通过关联的列值为行的各个部分着色?或者,是否有一种方法可以拆分数据并将线绘制为一系列线段,并按加热器状态拆分数据,从而在不同的时间范围内进行缩放?
这是一些示例代码
templog = data.frame(temp = c(0,1,2,3,4,4,3,2,1,0,0,1,2,3,4),
time = as.POSIXct(c('2019-02-10 00:00:05','2019-02-10 00:00:10','2019-02-10 00:00:15','2019-02-10 00:00:20','2019-02-10 00:00:25','2019-02-10 00:00:30','2019-02-10 00:00:35','2019-02-10 00:00:40','2019-02-10 00:00:45','2019-02-10 00:00:50','2019-02-10 00:00:50','2019-02-10 00:00:55','2019-02-10 00:01:00','2019-02-10 00:01:05','2019-02-10 00:1:10'), tz = 'GMT'),
heaterstatus = c('on','on','on','on','on','off','off','off','off','off','on','on','on','on','on'))
plot(templog$temp~templog$time, col = as.factor(templog$heaterstatus))
plot(temp~time, data = templog, col = as.factor(heaterstatus), type = 'l')
在第二个plot()调用中,我希望线的不同部分的颜色不同。如果无法做到这一点,我希望有一种自动分割数据并按heaterstatus绘制不同线段的方法,该方法将在我向日志中添加新数据时进行缩放。
谢谢。
答案 0 :(得分:1)
这可以通过segments函数来实现。
for(i in 1:(length(templog$time)-1)){
segments(templog$time[i],
templog$temp[i],
templog$time[i+1],
templog$temp[i+1],
col=templog$heaterstatus[i])
}
基本上,您要遍历每对点并以指定的颜色绘制一条直线。另外,您可以简化您的plot()
通话-
plot(temp~time, data=templog, type='n')
足够了。
希望这会有所帮助:-)