我有一个数据集,该数据集包含三列:无时间戳的Date
,针对与TimeTS
相关的特定事件,将一天中的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
在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
个波段之一,而没有其他波段。另外,我认为它是垂直运行而不是水平运行。
任何想法都值得赞赏。
答案 0 :(得分:0)
由于@ 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