将具有索引列的数据框中的多条线叠加到现有图中

时间:2014-06-24 13:47:09

标签: r plot

我有一个包含3列的数据框(Id,Lat,Long),您可以使用以下数据构建一小部分:

df <- data.frame(
  Id=c(1,1,2,2,2,2,2,2,3,3,3,3,3,3),
  Lat=c(58.12550, 58.17426, 58.46461, 58.45812, 58.45207, 58.44512, 58.43358, 58.42727, 57.77700, 57.76034, 57.73614, 57.72411, 57.70498, 57.68453),
  Long=c(-5.098068, -5.314452, -4.914108, -4.899922, -4.887067, -4.873312, -4.852384, -4.840817, -5.666568, -5.648711, -5.617588, -5.594681, -5.557740, -5.509405))

Id列是索引列。因此,具有相同Id个数字的所有行都具有单行的坐标。在我的数据框中,这个Id数字从1到7696不等。所以我有7696行来绘制。

每个Id号码与LatLong坐标的单独行相关。我想要做的是将所有这7696条单独的线叠加到现有的地块上。

上面的示例数据包含Lat&amp;第1,第2,第3行的Long坐标。

将所有这些线叠加到现有情节上的最佳方法是什么,我想的可能是某种循环?

2 个答案:

答案 0 :(得分:2)

使用ggplot2

#dummy data
df <- data.frame(
  Id=c(1,1,2,2,2,2,2,2,3,3,3,3,3,3),
  Lat=c(58.12550, 58.17426, 58.46461, 58.45812, 58.45207, 58.44512, 58.43358, 58.42727, 57.77700, 57.76034, 57.73614, 57.72411, 57.70498, 57.68453),
  Long=c(-5.098068, -5.314452, -4.914108, -4.899922, -4.887067, -4.873312, -4.852384, -4.840817, -5.666568, -5.648711, -5.617588, -5.594681, -5.557740, -5.509405))


library(ggplot2)
#plot
ggplot(data=df,aes(Lat,Long,colour=as.factor(Id))) +
  geom_line()

enter image description here

使用基数R:

#plot blank
with(df,plot(Lat,Long,type="n"))
#plot lines
for(i in unique(df$Id))
  with(df[ df$Id==i,],lines(Lat,Long,col=i))

enter image description here

答案 1 :(得分:1)

老实说,我认为任何采取的方法都会导致非常杂乱的情节,因为你有这么多Id s(除非他们的行不重叠) 。无论哪种方式,我都可能会使用ggplot2

##
if( !("ggplot2" %in% installed.packages()[,1]) ){
    install.packages("ggplot2",dependencies=TRUE)
}
library(ggplot2)
##
D <- data.frame(
    Id=Id,
    Lat=Lat,
    Long=Long
)
##
ggplot(data=D,aes(x=Lat,y=Long,group=Id,color=Id))+
    geom_point()+ ## you might want to omit geom_point() in your plot
    geom_line()
##

我在group=Id, color=Id中使用aes()而不是将Id作为因素传递给aes()而仅使用color=Id的原因是您最终会包含7000多个因子水平的图例(其中大部分在绘图区域中不可见)。