R 用ggplot绘制重叠的垂直线

R 用ggplot绘制重叠的垂直线,r,plot,ggplot2,network-programming,reshape,R,Plot,Ggplot2,Network Programming,Reshape,我有一个按时间顺序排列的成对交互列表。我想画一个这些交互作用的时间网络,看起来像下图 我的数据如下例所示。id1和id2值是个体的唯一标识符。时间表示这些个体之间发生交互的时间。所以,在时间=1时,我想画出个体-1和个体-2之间的联系 id1 <- c(1, 2, 1, 6, 2, 2, 1) id2 <- c(2, 4, 5, 7, 3, 4, 5) time <- c(1, 2, 2, 2, 3, 4, 5) df <- data.frame(id1, id2, t

我有一个按时间顺序排列的成对交互列表。我想画一个这些交互作用的时间网络,看起来像下图

我的数据如下例所示。id1和id2值是个体的唯一标识符。时间表示这些个体之间发生交互的时间。所以,在时间=1时,我想画出个体-1和个体-2之间的联系

id1 <- c(1, 2, 1, 6, 2, 2, 1)
id2 <- c(2, 4, 5, 7, 3, 4, 5)
time <- c(1, 2, 2, 2, 3, 4, 5)
df <- data.frame(id1, id2, time)

id1您可以在不重塑数据的情况下执行此操作,只需在
几何曲线中将一个
id
设置为
y
,将另一个
id
设置为
yend

ggplot(df, aes(x = time, y = id1)) +
    geom_curve(aes(xend = time, yend = id2), curvature = 0.3) +
    geom_hline(yintercept = 1:7, colour = scales::muted("blue")) +
    geom_point(size = 3) +
    geom_point(aes(y = id2), size = 3) +
    coord_cartesian(xlim = c(0, max(df$time) + 1)) +
    theme_bw()
输出:


您可以在不重塑数据的情况下执行此操作,只需在
几何曲线中将一个
id
设置为
y
,将另一个
id
设置为
yend

ggplot(df, aes(x = time, y = id1)) +
    geom_curve(aes(xend = time, yend = id2), curvature = 0.3) +
    geom_hline(yintercept = 1:7, colour = scales::muted("blue")) +
    geom_point(size = 3) +
    geom_point(aes(y = id2), size = 3) +
    coord_cartesian(xlim = c(0, max(df$time) + 1)) +
    theme_bw()
输出:

图书馆:

library('ggplot2')
library('data.table')
数据:

id1库:

library('ggplot2')
library('data.table')
数据:


id1谢谢这太棒了!我想我已经很接近了,但整形实际上比我意识到的要简单。:)谢谢,这太棒了!我想我已经很接近了,但整形实际上比我意识到的要简单。:)哇,太酷了,比我想象的简单多了。我想yend正是我需要的哇酷,比我想象的简单多了。我想yend正是我需要的