Есть ли способ закрасить сегменты линии в базе R? - PullRequest
0 голосов
/ 14 февраля 2019

В настоящее время я делаю некоторые графики температуры / времени.Я раскрашиваю данные по состоянию включения / выключения обогревателя.При построении графика на больших временных масштабах точки начинают сливаться вместе, и синусоидальная структура точек затеняется.Этот шаблон намного более понятен, если я установлю type = 'l' в вызове plot (), но это не позволяет мне раскрасить по статусу нагревателя.

Есть ли способ покрасить части линии с помощью связанныхзначение столбца?Или, альтернативно, есть ли способ, которым я мог бы разделить данные и построить линию как серию отрезков, разделив данные по состоянию нагревателя, которые будут масштабироваться с различными временными диапазонами?

Вот пример кода

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 () я бы хотел, чтобы разные участки линии были по-разному окрашены.Если это невозможно, я бы хотел автоматизировать разделение данных и построение графиков различных отрезков линий по статистике нагревателя, которая будет масштабироваться по мере добавления новых данных в журнал.

Спасибо.

1 Ответ

0 голосов
/ 14 февраля 2019

Это возможно с помощью функции сегментов .

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

.

Надеюсь, это поможет: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...