考虑这个数据框:
data <- data.frame(ID = rep(1, 6),
Loc = c("A","B","D","A","D","B"),
TimeDiff = c(NA, 4.5,2.2,2.1,3.4,7.2))
我们在多个位置 (Loc
) 的观测值具有相同的 ID
。观测值按其发生的顺序排列,因此第一个观测值位于 Loc == A
处,第二个观测值位于 Loc == B
处,依此类推。 TimeDiff
是每个连续观察之间的时间段。我制作了下图来显示 Loc
之间随时间变化的“路径”:
library(tidyverse)
data%>%
mutate(RowNumber = row_number(), xend = lead(Loc), yend = lead(RowNumber))%>%
ggplot()+
geom_segment(aes(x = Loc, y = RowNumber, xend = xend, yend = yend), arrow = arrow(), size = 2)
我的主要问题:我们如何根据变量 TimeDiff
来衡量每个箭头的大小,以及如何使用 TimeDiff
的相应值来标记每个箭头?这意味着连接前 2 个观测值(其中 Loc == A
和 Loc == B
)的箭头将比后面的箭头更粗,因为存在更大的 TimeDiff
(4.2) 两个观察结果之间的关系。
一个附带问题:
请注意,Loc
的 3 个级别包括 A
、B
和 D
。假设我想将另一个级别 C
包含在 B
和 D
之间的图中。这怎么能扔进去呢?
最佳答案
这是一个可能的解决方案,稍微修改了数据。
缺点是硬编码 nudge_x
和 nudge_y
:
# modified data NA replaced by 0 and last value replaced by NA as we only have 5 differences in 6 datapoints
data <- data.frame(ID = rep(1, 6),
Loc = c("A","B","D","A","D","B"),
TimeDiff = c(0, 4.5,2.2,2.1,3.4,NA))
library(tidyverse)
data%>%
mutate(RowNumber = row_number(), xend = lead(Loc), yend = lead(RowNumber))%>%
ggplot()+
geom_segment(aes(x = Loc, y = RowNumber, xend = xend, yend = yend),
arrow = arrow(), size = data$TimeDiff) +
geom_label(aes(x = Loc, y = RowNumber, xend = xend, yend = yend, label = data$TimeDiff),
nudge_x = c(0.3, 0.5, -1, 1, -0.7),
nudge_y = seq(0.2,6, 0.1))
关于r - 如何使用另一个变量对 geom_segment 中创建的箭头进行加权和标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69260781/