R Plotly, составной график рассеяния - PullRequest
0 голосов
/ 30 января 2020

У меня есть набор данных, который содержит три столбца: Date без отметки времени, TimeTS дня, преобразованного в число часов с полуночи для определенного события c, связанного с Date. Третий столбец - это Phase, который либо либо morning, afternoon, evening, либо night. Фаза является производной от TimeTS.

Ниже приведен пример

Date       TimeTS   Phase  
2020-01-29 2.75     Night 
2020-01-29 4.83     Morning
2020-01-29 7        Morning
2020-01-30 10.6     Afternoon

Мне нужно использовать интерактивную диаграмму, например plotly, чтобы показать следующее:

  • Точечная диаграмма с Date на оси x и Time на y с каждым моментом времени, отмеченным на каждой дате
  • Полупрозрачные полосы Phase, бегущие горизонтально на диаграмме, для легкой интерпретации временных полос и распределение маркеров по Phase

Приведенный ниже код приближает меня к желаемому результату, но не совсем.

p <- ggplot(clean.data, aes(x=Date,y=TimeTS)) +
  geom_rect(data=clean.data, mapping = aes(
    xmin=min(Date),
    xmax=max(Date),
    ymin=0,
    ymax=24,
    fill=Phase), alpha=0.1) +
  # scale_fill_manual(values=c("Morning" = "red", "Afternoon" = "blue", "Evening" = "green", "Night" = "black")) +
  geom_point()
p <- ggplotly(p)
p

Это дает мне только одну из Phase полос на графике, а не другие. Плюс я думаю, что он работает вертикально, а не горизонтально.

Любые идеи приветствуются.

1 Ответ

0 голосов
/ 31 января 2020

Благодаря @ user12728748 я смог это сделать. Изменения кода ниже:

df.phase <- data.frame(start = c(0,4,10,16,22), end = c(4,10,16,22,24), phase = c("Night", "Morning", "Afternoon", "Evening", "Night"))

p <- ggplot(clean.data, aes(x=Date,y=TimeTS)) +
  geom_rect(data=df.phase, inherit.aes = FALSE, aes(
    xmin= min(clean.data$Date),
    xmax= max(clean.data$Date),
    ymin=start,
    ymax=end,
    fill=phase), alpha=0.5) +
  scale_fill_manual(values=c("Morning" = "orange", "Afternoon" = "blue", "Evening" = "pink", "Night" = "black")) +
  geom_point()
p <- ggplotly(p)
p

Код сгенерирует следующий вывод Horizontal Rectangular swimlanes on a scatter plot

...