2017-01-26 10 views
0

Я работаю над визуализацией взаимодействия с пользователем в мобильном приложении. Я хотел бы построить их в одномерной временной шкале, которая кодируется цветом по типу действия.График временной шкалы с цветовой кодировкой в ​​R

i.e, мои две переменные - это время (в мс, по оси x) и тип касания (используется для цветового кода линии). Цвета должны быть повторены.

В идеале сюжет будет выглядеть как this, и я нашел this previous question, который поставляет что-то подобное, но мне интересно, нет ли чего-то лучшего.

Есть ли какие-либо другие методы, использующие R, которые позволят мне это сделать?

ответ

0

У меня есть работа с базовым методом R. Это немного хаки, но с некоторой настройкой он должен работать хорошо. Я удалил использование пакетов data.table, timeline и ggplot, выбрав функцию polygon.

df <- data.frame(Set=c("x","y","z","x","y","z","x","y","z","x","y","z","x"), 
     StartDate=c(1380708900,1402963200,1420070400,1421280000,1410912000,1396310400,1397520000,1418860800,1404172800,1405382400,1395100800,1412121600,1413331200), 
     EndDate= c(1395099900,1404171900,1421279100,1430985600,1412120700,1397519100,1402962300,1420069500,1405381500,1410911100,1396309500,1413330300,1418859900)) 

df$StartLabel <- as.POSIXct(df$StartDate,tz="UTC",origin="1970-01-01") 
df$Set <- as.factor(df$Set) 

Вышеуказанные объекты data.frame.

Это создает заговорщической холст

plot(c(df$StartDate[1], tail(df$EndDate,1)), c(0.4,0.65), 
    type='n', xlab='Time', ylab='', axes=FALSE) 

Это Clunk-ILY перебирает ваши ценности и рисует цветной многоугольник для каждого периода времени для каждого наблюдения

for(i in 1:nrow(df)){ 
    polygon(x=c(rep(df$StartDate[i],2), rep(df$EndDate[i],2)), 
      y=c(0.6,0.4,0.4,0.6), col=rainbow(3, alpha=0.75)[df$Set[i]], 
      border=rainbow(3)[df$Set[i]]) 
} 

Затем я добавляю в (это может использовать некоторую настройку в зависимости от того, какую часть информации о дате, которую вы хотите показать.

axis(1, labels=df$StartLabel, at=df$StartDate) 

Затем это устанавливает легенду в верхней части сюжета.

legend('top', horiz=TRUE, 
     c('Test set', 'Training set', 'Validation set'), 
     pch=16, col=rainbow(3), bty='n', x.intersp=1.5, title='Group') 

Надеюсь, это поможет.

+0

Вы также можете использовать 'rect', если хотите рисовать прямоугольники (немного другой ввод), но это не имеет большого значения. 'rect (df $ StartDate [i], 0.4, df $ endDate [i], 0.6)' будет рисовать прямоугольник аналогично использованию общей многоугольной функции. –

+1

Блестяще, спасибо. Я смог сделать именно то, что хотел, используя этот очень простой и хорошо объясненный ответ. –

0

Без рабочего примера я бы предположил, что вы используете пакет ggplot2 (вместе с ggfortify), который позволяет сопоставлять переменные (здесь: тип действия) с цветом. Частой альтернативой является размер (точек/точек) или толщина (линий).

Кроме того, вы можете найти временные ряды ts объектов (см. example/reference here), чтобы быть полезным. Тем не менее, это не является требованием к типу данных, которые вам интересны при построении графика. Удачи!