R Plotly,复合散点图

R Plotly, composite scatter graph

我有一个包含三列的数据集:Date 没有时间戳,对于与 [=12] 关联的特定事件,当天的 TimeTS 转换为自午夜以来的小时数=].第三列是 Phase,它是 morningafternooneveningnight。相位来自 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 这样的交互式图表来显示以下内容:

下面的代码让我接近我想要的结果,但不完全是。

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 个波段之一,而不是其他波段。另外我认为它 运行 垂直而不是水平。

欢迎任何想法。

感谢@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

代码将生成以下输出