代码之家  ›  专栏  ›  技术社区  ›  Notna

将数据帧的特定单元格作为ggplot2的输入

  •  0
  • Notna  · 技术社区  · 6 年前

    我有点纠结于ggplot和我用作输入的数据帧。我有一个数据框 A 看起来是这样的:

       x         y
    1  0 50.825022
    2  1 44.154257
    3  0 50.116500
    4  1 46.027000
    5  0 55.905105
    6  1 50.753209
    7  0 44.804500
    8  1 42.894000
    9  0 15.030799
    10 1 11.881330
    11 0 21.456833
    12 1 18.942833
    13 0  5.664676
    14 1  3.350577
    

    如何手动引用数据帧的特定单元格,并告诉ggplot2我要绘制,例如,一个点(a[1,1]作为我的x值(x=0)和一个点(a[1,2]作为我的y值(y=50.825002),然后另一个点(a[2,1]作为我的x值(x=1)和一个点(a[2,2]作为我的y值(y=44.154257))然后用一条线链接这两个点。

    这样做的目的是获得如下的情节: enter image description here

    如果有人能告诉我 ggplot2 ,我真的很感激。

    如果需要,这里是要复制和粘贴的数据帧:

    structure(list(x = c(0L, 1L, 0L, 1L, 0L, 1L, 0L, 1L, 0L, 1L, 
                          0L, 1L, 0L, 1L), y = c(50.8250223621947, 44.1542573925467, 50.1165, 
                                                 46.027, 55.9051046135438, 50.753208962261, 44.8045, 42.894, 15.0307991170913, 
                                                 11.8813302333097, 21.4568333333333, 18.9428333333333, 5.66467592950172, 
                                                 3.35057697360927)), .Names = c("x", "y"), class = "data.frame", row.names = c(NA, 
                                                                                                                               -14L))
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   Ronak Shah    6 年前

    如果您想动态提供两个点(将这些行子集化并打印),则可以创建一个函数。

    library(ggplot2)
    plot_two_points <- function(row1, row2) {
        temp = rbind(df[row1,], df[row2,])
        ggplot(temp, aes(x, y, label = y)) + geom_point() + geom_line() + 
            geom_label(nudge_x = 0.05, nudge_y = 0.15)
    }
    

    调用要显示哪些行的函数

    plot_two_points(3, 4)
    

    enter image description here

        2
  •  0
  •   pogibas    6 年前

    使用 ggplot2 您可以使用:

    library(ggplot2)
    ggplot(A, aes(factor(x), y)) +
        geom_point()
    

    我们把它放在这里 x 在X轴上 y 在y轴上。我们正在使用 factor 作为 是一个分类变量。

    如果我们需要联系 i 以及 i+1 我们必须将分组变量添加到数据中。我们可以这样做:

    From 1 to half of the rows repeat integer twice
    A$ID <- rep(1:(nrow(A) / 2), each = 2)
    # Returns:
    # [1] 1 1 2 2 3 3 4 4 5 5 6 6 7 7
    

    在我们可以使用的点之间添加线 geom_path 并指定分组变量 ID .

    ggplot(A, aes(x, y, group = ID)) +
        geom_point() + 
        geom_line()
    

    enter image description here