我有一个具有以下结构的数据框(两个事件的空间明智到达和离开时间,U1和U2)。我试图绘制一个时空图,使x轴显示时间刻度,y轴显示空间。我尝试过很少的东西,比如情节功能,然而,无法用来绘制它。任何人都可以帮助我吗?谢谢!
Space U2 U1
A 16:14:00 16:29:00
A 18:56:00 19:05:00
B 19:14:00 19:16:59
B 19:32:00 19:39:59
C 19:50:00 19:57:59
C 20:10:59 20:15:00
D 16:21:00 16:39:00
D 16:32:00 16:54:00
E 16:48:59 17:10:00
E 17:01:59 17:24:00
更新:我已经能够用ggplot绘制一些东西,但是,空格之间的跳跃点没有连接。不知道如何连接它们?
df%>% mutate(Space= factor(Space, levels=unique(Space))) %>% gather(var, val, -Space)%>% ggplot(aes(Space, val, color = var,group = interaction(val,Space,var)))+ geom_line()
答案 0 :(得分:1)
我对OP的要求的理解如下:
每个空格的第一行给出到达时间,第二行给出出发时间。因此,事件U1
在太空A
的到达时间为16:29,出发时间为19:05。
在图表中,每个事件和空间的到达和离开时间应通过线段连接,沿x轴的时间和沿y轴的空间。
要使用geom_segment()
绘制线段,需要对数据进行重新整形,以使到达和离开时间显示在一行中的两列中,而不是一行下面的两列。这是通过使用melt()
包中的dcast()
和data.table
来实现的:
library(data.table) #CRAN version 1.10.4 used
# use chaining, start with converting a copy of df to class data.table
pd <- data.table(df)[
# reshape from wide to long form to get all events in one column,
# thereby renaming conveniently
, melt(.SD, id.var = "Space", variable.name = "Event", variable.factor = FALSE)][
# reshape from long to wide to get arrival and departure times
# for each space and each event in one row
# use factor to give meaningful names to columns (instead of numbers)
, dcast(.SD, Space + Event ~ factor(rowid(Space, Event),
labels = c("Arrival", "Departure")))]
pd
Space Event Arrival Departure 1: A U1 16:29:00 19:05:00 2: A U2 16:14:00 18:56:00 3: B U1 19:16:59 19:39:59 4: B U2 19:14:00 19:32:00 5: C U1 19:57:59 20:15:00 6: C U2 19:50:00 20:10:59 7: D U1 16:39:00 16:54:00 8: D U2 16:21:00 16:32:00 9: E U1 17:10:00 17:24:00 10: E U2 16:48:59 17:01:59
现在,可以绘制重新塑造的数据:
library(ggplot2)
ggplot(pd) +
aes(x = Arrival, xend = Departure, y = Space, yend = Space, colour = Event) +
geom_segment() +
geom_point() + geom_point(aes(x = Departure)) +
xlab("Time") +
theme_bw()
请注意,某些线段会重叠,但会显示起点和终点。
避免过度绘制的其他选项可能是刻面或在y轴上绘制交互变量interaction(Space, Event)
(或interaction(Event, Space)
以获得不同的顺序)。