【问题标题】:Plot overlapping vertical lines with ggplot用 ggplot 绘制重叠的垂直线
【发布时间】:2018-05-06 18:09:19
【问题描述】:

我有一个按时间排序的成对交互列表。我想绘制这些交互的时间网络,如下图所示。

我的数据如下例所示。 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)

根据这个StackOverflow question,我可以看到可以在ggplot中的y轴位置之间绘制垂直线。这是通过将数据重新整形为长格式来实现的。当每个时间值只有一对时这很好,但当一次有多个交互对时则不行。例如,在我的虚拟数据中,在时间 = 2 时,有三对(在图中我将通过覆盖不透明度降低的线来显示这些)。

我的问题是,我如何组织这些数据以使 ggplot 能够在指定时间点绘制潜在的多个交互对?

我一直在尝试通过为同时出现的多对中的每一对分配一个额外的标识符来重新组织数据。我想象数据表看起来像this,但我还没有弄清楚如何在 R 中进行此操作...在此示例中,时间 = 2 时的三个交互由 1、2 或3. 即使我可以安排这个,我仍然不确定如何让 ggplot 阅读它。

最终,我试图在scientific paper 中创建类似于图 2 的东西。

任何帮助将不胜感激!

【问题讨论】:

    标签: r plot ggplot2 network-programming reshape


    【解决方案1】:

    您可以在不重新调整数据的情况下执行此操作,只需将geom_curve 中的一个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()
    

    输出:

    【讨论】:

    • 哇,太棒了,比我想象的要简单得多。我猜日元正是我所需要的
    【解决方案2】:

    图书馆:

    library('ggplot2')
    library('data.table')
    

    数据:

    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)
    setDT(df)
    df1 <- melt.data.table( df, id.vars = c('time'))
    

    剧情:

    p <- ggplot( df1, aes(time, value)) + 
      geom_point() + 
      geom_curve( mapping = aes(x = time, y = id1, xend = time, yend = id2, colour = "curve"), 
                  data = df, 
                  curvature = 0.2 )
    print(p)
    

    【讨论】:

    • 谢谢,太好了!我想我已经很接近了,但重塑实际上比我想象的要简单。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-16
    • 1970-01-01
    • 2012-04-04
    • 2019-05-05
    • 1970-01-01
    相关资源
    最近更新 更多