有没有办法为基数R中的线段着色?

时间:2019-02-14 17:31:10

标签: r plot

我目前正在做一些温度/时间的绘图。我通过加热器的开/关状态为数据点着色。在较大的时间比例上进行绘制时,这些点开始融合在一起,并且这些点的正弦形图案变得模糊。如果我在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绘制不同线段的方法,该方法将在我向日志中添加新数据时进行缩放。

谢谢。

1 个答案:

答案 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')

足够了。

希望这会有所帮助:-)