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

使用R中的ggplot2跟踪散点图中点之间的直线[闭合]

  •  -3
  • antecessor  · 技术社区  · 7 年前

    您可以下载数据 here

    enter image description here

    每行表示一个可以在不同部分找到的对象,如XY坐标(x1,y1;x2,y2;…;xn,yn)所示。在此数据集中,具有更多点的行是“1”、“16”和“18”,每个行有4个点(坐标)。

    我想使用ggplot2散绘所有这些XY坐标,并分别跟踪每行中点之间的直线。

    1 回复  |  直到 7 年前
        1
  •  0
  •   antecessor    7 年前

    我最终通过运行几个代码手动完成了这项工作:

    首先,我删除了没有数据的列:

    Refits_H <- within(Refits_H, {
      Unit <- NULL  
      x5 <- NULL
      x6 <- NULL
      x7 <- NULL
      x8 <- NULL
      x9 <- NULL
      x10 <- NULL
      x11 <- NULL
      y5 <- NULL
      y6 <- NULL
      y7 <- NULL
      y8 <- NULL
      y9 <- NULL
      y10 <- NULL
      y11 <- NULL 
    })
    

    其次,我对行和列重新排序:

    Refits_H <- with(Refits_H, Refits_H[order(y4, y3, y2, y1, decreasing=FALSE),])
    Refits_H <- Refits_H[c("x4","y4","x3","y3","x2","y2","x1","y1")]
    

    最后,我回答了我自己的问题,我运行了以下代码:

    library(tidyverse)
    library(dplyr)
    
    Refits_H_trans <- gather(Refits_H, xy, val) %>% 
        mutate(coord = substr(xy, 1, 1),
               pair = parse_number(xy)) %>% 
        group_by(xy) %>% 
        mutate(sample = 1:n()) %>% 
        ungroup() %>% 
        select(-xy) %>% 
        spread(coord, val) %>% 
        filter(!is.na(x) & !is.na(y))