【问题标题】:ggplot line segments from one point to many from different dataframesggplot线段从一个点到来自不同数据帧的多个
【发布时间】:2019-07-03 04:09:21
【问题描述】:

我有一个 df 具有 2 个组的起点,另一个具有相同组的终点。我想制作一个ggplot画线,从第1组开始到所有符合条件的第1组结束,从第2组开始到所有符合条件的第2组结束,但我不知道我需要什么geom_使用来实现这一点,如果我可以尝试从两个不同的数据帧中做到这一点。

 # start coordinates:
 set.seed(5)
 start <- data.frame(matrix(nrow=2,ncol=3))
 colnames(start) <- c("group","X","Y")
 start$group <- c(1,2)
 start$X <- c(5,10)
 start$Y <- c(5,10)

 # end coordinates:
 df <- data.frame(matrix(nrow = 20,ncol=4))
 colnames(df) <- c("group","X","Y","condition")
 df$group <- rep(c(1,2),each=10)
 df$X <- runif(20,0,20)
 df$Y <- runif(20,0,20)
 df$condition <- c("n","n","n","y","n",
                   "y","n","n","y","y",
                   "y","n","n","y","n",
                   "y","y","y","n","y")

 # plot data
 library(ggplot2)
 ggplot(data=df,aes(x=X,y=Y,color=group))+
      geom_point(aes(shape=condition))+
      geom_point(data=start,aes(x=X,y=Y),size=2)

我想要的是所有从起点到每个组的“条件=是”终点的线。该图看起来像两个重叠的星,但我无法弄清楚如何在一个 geom_ 命令中从两个数据帧中调用。这是我迄今为止尝试过的。

 ggplot(data=df,aes(x=X,y=Y,color=group))+
 geom_point(aes(shape=condition))+
 geom_point(data=start,aes(x=X,y=Y),size=2)+  
 geom_segment(aes(x=start$X,
                  y=start$Y,
                  xend=df$X[df$condition=="y"],
                  yend=df$Y[df$condition=="y"],
                  group=group))

但这没有用。不确定 geom_segment 是否是我应该使用的。

【问题讨论】:

    标签: r ggplot2 vector plot line


    【解决方案1】:
    merged.data <- merge(x=start, y=df, by="group")
    colnames(merged.data) <- c("group", "X.start", "Y.start", "X.end", "Y.end", "condition")
    
    ggplot(df, aes(x=X, y=Y, color=as.character(group))) + 
      geom_point(size=2)  +
      geom_point(data=start, aes(x=X, y=Y, color=as.character(group)), size=2) +
      geom_segment(data=merged.data[merged.data$condition == "y", ], aes(x=X.start, y=Y.start, xend=X.end, yend=Y.end, color=as.character(group)))
    

    【讨论】:

      【解决方案2】:
      library(dplyr); library(ggplot2)
      start %>%
        left_join(df[df$condition=="y",], by = "group") %>%
      
        ggplot(aes(x = X.x, y = Y.x,
                   xend = X.y, yend = Y.y, group = group)) +
        geom_segment() +
        geom_point() +
        geom_point(data = df, aes(x = X, y = Y, shape = condition), inherit.aes = F)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多