【问题标题】:R: draw a line between two points in ggplotR:在ggplot中的两点之间画一条线
【发布时间】:2015-12-17 20:12:05
【问题描述】:

我有一个看起来像这样的数据框:

X      Y
100    50
80     60
70     90
110    60
30     20
... ...

大约还有 100 行。 X列和Y列都是数字

当我绘制这些点时,我想在第一个点 (100,50) 和任何其他点之间画一条线。换句话说,我想有一条线连接(100,50)和(80,60),一条线连接(100,50)和(70,90),一条线连接(100,50)和(110) ,60) 但 (80,60) 和 (70,90) 之间没有界限。所有行都从第一个点开始。

我没有第三列。我不能使用组。我想知道我是否仍然可以在 ggplot 中绘制此图。

谢谢

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    这个想法是使用组。为此,您必须添加可用于分组的第三列。实现此目的的一种可能方法如下。

    首先,我定义样本数据

    df <- read.table(text = "X      Y
          100    50
          80     60
          70     90
          110    60
          30     20", header = TRUE)
    

    然后,我创建一个新的数据框,其中第一行对其他每一行都重复。添加了一列grp,它将第一行的每个重复链接到其他行:

    n <- nrow(df) - 1
    new_data <- data.frame(X = c(rep(df$X[1], n), df$X[-1]),
                           Y = c(rep(df$Y[1], n), df$Y[-1]))
    new_data$grp <- as.factor(rep(1:n, times = 2))
    new_data
    ##     X  Y grp
    ## 1 100 50   1
    ## 2 100 50   2
    ## 3 100 50   3
    ## 4 100 50   4
    ## 5  80 60   1
    ## 6  70 90   2
    ## 7 110 60   3
    ## 8  30 20   4
    

    现在,可以直接用 ggplot 创建绘图了:

    library(ggplot2)
    ggplot(new_data, aes(X, Y, group = grp)) + 
       geom_point() + geom_line()
    

    美学group 控制哪些点应该由一条线连接。由于new_data 中的列grp 总是将第一行的重复与其他每一行配对,因此第一行对应的点与其他每一点相连。

    如果省略group = grp,则会绘制一条穿过所有点的单线图。

    【讨论】:

    • 只是一个插件,可以使用aes(X, Y, group = 1)连接所有点,无需生成新列。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-16
    • 2016-08-25
    • 1970-01-01
    • 2014-03-01
    • 1970-01-01
    相关资源
    最近更新 更多