我有一个包含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
号码与Lat
和Long
坐标的单独行相关。我想要做的是将所有这7696条单独的线叠加到现有的地块上。
上面的示例数据包含Lat
&amp;第1,第2,第3行的Long
坐标。
将所有这些线叠加到现有情节上的最佳方法是什么,我想的可能是某种循环?
答案 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()
使用基数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))
答案 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多个因子水平的图例(其中大部分在绘图区域中不可见)。