【问题标题】:Vertical lines between points with ggplot2ggplot2点之间的垂直线
【发布时间】:2012-09-03 19:42:42
【问题描述】:

我是ggplot2 的新手,不知道如何在它们之间绘制垂直的灰色虚线

x 轴上的点/点。这是我的示例代码:

d1 <- runif(10,10,15)

d2 <- runif(10,25,30)

d3 <- rep(1:10,2)

df <- data.frame(x = d3, y = c(d1,d2))

ggplot(df, aes(x=x, y=y)) +

geom_point()

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    如果您的实际数据的结构与示例中使用的数据类似,只需将geom_line(aes(group = d3)) 添加到图中即可。

    ggplot(df, aes(x=x, y=y)) +  
     geom_point() + geom_line(aes(group = d3))
    

    【讨论】:

    • 感谢您的解决方案!简单而且效果很好。还要感谢其他解决方案,并澄清我只想要两点之间的线,而不是超过两点的延伸!
    【解决方案2】:

    肯定有比这更好的方法,但是:

    d1 <- runif(10,10,15)
    d2 <- runif(10,25,30)
    d3 <- rep(1:10,2)
    df <- data.frame(x = d3, y = c(d1,d2))
    df$place <- rep(c("min", "max") , each=10)
    
    df_wide <- reshape(df, direction = "wide", v.names="y", timevar="place", idvar="x") 
    
    ggplot(df, aes(x=x, y=y)) +
        geom_segment(aes(x=x, xend=x, y=y.min, yend=y.max), 
            size=1, data=df_wide, colour="grey70", linetype="dotted") +
        geom_point() 
    

    虽然我不确定您所说的“沿 x 轴”是什么意思,但也许您希望它从上到下延伸,而不仅仅是在点之间。

    【讨论】:

    【解决方案3】:

    您应该使用geom_vline() 来执行此操作。

            d1 <- runif(10,10,15)
            d2 <- runif(10,25,30)
            d3 <- rep(1:10,2)
            df <- data.frame(x = d3, y = c(d1,d2))
           ggplot(df, aes(x=x, y=y)) + geom_point() + 
    geom_vline(xintercept = df$x, linetype= 3, colour = "#919191")
    

    【讨论】:

    • 线条是否应该延伸超过这些点? (我自己也不确定)
    • 我猜这就是我想出这个解决方案的原因。从问题中不清楚。