Base R:在group定义的循环中添加points()

时间:2014-09-19 10:58:42

标签: r loops plot dataframe points

我正在寻找一种方法来在基础R中生成不同的图,并手动将点和线添加到图中。

xy <- data.frame(NAME=c("NAME1","NAME1","NAME2","NAME2"), X_START_YEAR=c(1984,1986,1899,1903), Y_START_VALUE=c(75,25,-90,-8),X_END_YEAR=c(1986,1994,1909,1924),Y_END_VALUE=c(20,50,-15,-70))
xy
      NAME          X_START_YEAR    Y_START_VALUE   X_END_YEAR   Y_END_VALUE
    1 NAME1         1984            75              1986          20
    2 NAME1         1986            25              1994          50
    3 NAME2         1899           -90              1909         -15
    4 NAME2         1903            -8              1924         -70

是否可以将points()添加到包含第一行(STARTING POINT X_START_YEAR/Y_START VALUE到END POINT:X_END_YEAR/Y_END_VALUE)的值的绘图中,然后在同一绘图中再次绘制相同的方案第二行的值。

在生成此图之后,由NAME定义的新组开始,并且应在与上述相同的方案中为第3行和第4行生成新图。

与此示例数据不同,我最终有大约40000行和1300个组,我正在寻找一种方法在基础R中正确绘制这些数据。感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

您可以按名称拆分数据,并按照以下方式绘制每个组:

layout(matrix(c(1,2)))   ## don't use layout in your case
for (dat in split(xy,xy$NAME)){
  xx = unlist(dat[,grep('X_',colnames(dat))])
  yy = unlist(dat[,grep('Y_',colnames(dat))])
  plot(xx,yy,main=unique(dat[,1]),pch=20)
  dat <- dat[,-1]
  segments(dat[,1],dat[,2],dat[,3],dat[,4])
}

enter image description here

这将导致每个组的情节。当然,如果将结果保存到控制台之外的其他内容,则应该定义设备之前的位置。