正确的 points() 在带有 for 循环的多个映射中使用
Proper points() use in multiples maps with for loop
我想制作几张地图(我的数据集中的每个物种一张),但不知何故我无法实现我正在寻找的东西。
我想在其地图中绘制每个物种记录,但我只是为每个物种创建了一个点的地图...我不明白我的脚本有什么问题。你可以帮帮我吗?谢谢!
elevation <- getData("alt", country = "ES", mask=F)
slope <- terrain(elevation, opt = "slope",neighbors=4)
aspect <- terrain(elevation, opt = "aspect",neighbors=4)
hill <- hillShade(slope, aspect, 40, 270)
newextent<-extent(-7.99, -2.87, 39.9, 41.5)
land.pal <- colorRampPalette(c("#336600", "#F3CA89", "#D9A627",
"#A49019", "#9F7B0D", "#996600", "#B27676", "#C2B0B0", "#E5E5E5",
"#FFFFFF"), space="Lab") (1000)
for (i in seq_along(data$Species)) {
pdf(file=paste0("map ", data$Species[[i]],".pdf"), onefile=F)
plot(disaggregate(crop(elevation,newextent), 1, method="bilinear"), col = land.pal, legend=F)
points(data$Lat[[i]],data$Long[[i]], col="black") ##The error must be here, but I cannot fix it
dev.off()
}
提前致谢
数据:
Lat Long Species
-6.99 40.49 Sp1
-5.05 40.60 Sp1
-3.30 40.02 Sp1
-7.51 40.86 Sp1
-3.18 40.24 Sp1
-3.83 40.08 Sp1
-7.28 40.91 Sp1
-7.74 40.53 Sp1
-7.72 40.69 Sp1
-4.36 40.06 Sp1
-5.90 40.51 Sp2
-5.56 40.07 Sp2
-3.52 40.19 Sp3
-6.29 40.93 Sp3
-6.77 40.12 Sp3
-7.11 40.77 Sp4
-5.81 40.88 Sp4
-5.27 40.68 Sp4
-6.31 40.34 Sp4
-6.13 40.32 Sp4
-6.73 40.99 Sp4
-5.32 40.71 Sp4
-6.17 40.97 Sp4
-4.77 40.92 Sp4
-6.45 40.58 Sp5
-5.54 40.39 Sp5
-6.56 40.66 Sp5
-5.27 40.37 Sp5
目前,您正在遍历 Species 列的每个值,而不是作为一个整体遍历 Species 并且您通过了一个点Lat 和 Long,因此在 for
循环中传递了一行。
因此,考虑 by
通过 Species 因子对数据帧进行切片,将每个切片的数据帧迭代传递到一个函数中。下面未显示,但 by
可以 return 一个命名的对象列表,等于这里的因素分组 Species:
by(data, data$Species, FUN = function(df) {
pdf(file=paste0("map ", df$Species[[1]],".pdf"), onefile=FALSE)
plot(disaggregate(crop(elevation,newextent), 1, method="bilinear"), col = land.pal, legend=FALSE)
points(df$Lat, df$Long, col="black")
dev.off()
})
我想制作几张地图(我的数据集中的每个物种一张),但不知何故我无法实现我正在寻找的东西。
我想在其地图中绘制每个物种记录,但我只是为每个物种创建了一个点的地图...我不明白我的脚本有什么问题。你可以帮帮我吗?谢谢!
elevation <- getData("alt", country = "ES", mask=F)
slope <- terrain(elevation, opt = "slope",neighbors=4)
aspect <- terrain(elevation, opt = "aspect",neighbors=4)
hill <- hillShade(slope, aspect, 40, 270)
newextent<-extent(-7.99, -2.87, 39.9, 41.5)
land.pal <- colorRampPalette(c("#336600", "#F3CA89", "#D9A627",
"#A49019", "#9F7B0D", "#996600", "#B27676", "#C2B0B0", "#E5E5E5",
"#FFFFFF"), space="Lab") (1000)
for (i in seq_along(data$Species)) {
pdf(file=paste0("map ", data$Species[[i]],".pdf"), onefile=F)
plot(disaggregate(crop(elevation,newextent), 1, method="bilinear"), col = land.pal, legend=F)
points(data$Lat[[i]],data$Long[[i]], col="black") ##The error must be here, but I cannot fix it
dev.off()
}
提前致谢
数据:
Lat Long Species
-6.99 40.49 Sp1
-5.05 40.60 Sp1
-3.30 40.02 Sp1
-7.51 40.86 Sp1
-3.18 40.24 Sp1
-3.83 40.08 Sp1
-7.28 40.91 Sp1
-7.74 40.53 Sp1
-7.72 40.69 Sp1
-4.36 40.06 Sp1
-5.90 40.51 Sp2
-5.56 40.07 Sp2
-3.52 40.19 Sp3
-6.29 40.93 Sp3
-6.77 40.12 Sp3
-7.11 40.77 Sp4
-5.81 40.88 Sp4
-5.27 40.68 Sp4
-6.31 40.34 Sp4
-6.13 40.32 Sp4
-6.73 40.99 Sp4
-5.32 40.71 Sp4
-6.17 40.97 Sp4
-4.77 40.92 Sp4
-6.45 40.58 Sp5
-5.54 40.39 Sp5
-6.56 40.66 Sp5
-5.27 40.37 Sp5
目前,您正在遍历 Species 列的每个值,而不是作为一个整体遍历 Species 并且您通过了一个点Lat 和 Long,因此在 for
循环中传递了一行。
因此,考虑 by
通过 Species 因子对数据帧进行切片,将每个切片的数据帧迭代传递到一个函数中。下面未显示,但 by
可以 return 一个命名的对象列表,等于这里的因素分组 Species:
by(data, data$Species, FUN = function(df) {
pdf(file=paste0("map ", df$Species[[1]],".pdf"), onefile=FALSE)
plot(disaggregate(crop(elevation,newextent), 1, method="bilinear"), col = land.pal, legend=FALSE)
points(df$Lat, df$Long, col="black")
dev.off()
})