我有许多人的点数据,并使用for
循环为每个人生成地图。有些人每天比其他人旅行得更远,因此每个人的范围/缩放需要不同。在一个循环中,我一直在为每个人使用质心来生成qmap
的地图,但还需要为每个人获得唯一的范围/缩放。
我已经在下面生成了一个可重现的示例,其中IndID BBB与IndID AAA相比具有较小的归属范围(不会远行)。对于每个人,我导出一个地图,虽然下面我已经将结果地图写入list
对象以获得再现性。
library(ggmap)
set.seed(123)
dat1 <- data.frame(IndID = rep("AAA", 100),
Lat = sample(seq(45.500,45.900, 0.001), 100, replace = T),
Long = sample(seq(111.2,111.805, 0.001), 100, replace = T)*-1)
dat2 <- data.frame(IndID = rep("BBB", 100),
Lat = sample(seq(45.655,45.700, 0.001), 100, replace = T),
Long = sample(seq(111.4,111.5, 0.001), 100, replace = T)*-1)
dat <- rbind(dat1, dat2)
###Look at the Points
MeanLat <- mean(dat$Lat, na.rm = TRUE)
MeanLon <- mean(dat$Long, na.rm = TRUE)
BaseMap <- qmap(location = c(lon = MeanLon, lat = MeanLat), zoom = 10, maptype = "terrain")
BaseMap + geom_point(aes(x = Long, y = Lat, color = IndID), data = dat, size = 4)+
scale_colour_manual(values = c("darkblue","red"),drop=FALSE)
###Make list and run loop
Maps <- list()
for( i in unique(dat$IndID)){
#Subset data to IndID i
IndDat <- subset(dat, IndID == i)
#Get mean lat and long for IndID i
MeanLat <- mean(IndDat$Lat, na.rm = TRUE)
MeanLon <- mean(IndDat$Long, na.rm = TRUE)
#Get base map
BaseMap <- qmap(location = c(lon = MeanLon, lat = MeanLat), zoom = 10, maptype = "terrain")
#plot points on base map
FnlMap <- BaseMap + geom_point(aes(x = Long, y = Lat, color = IndID), data = IndDat, size = 4)+
scale_colour_manual(values = c("darkblue","red"),drop=FALSE)
#Store in list object
Maps[[i]] <- FnlMap
}
Maps$AAA
Maps$BBB
在这种情况下,zoom
的{{1}}参数设置为10.这适用于AAA,但不适用于BBB,使用缩放13可以更好地查看。
我正在为许多人生成地图,并希望为循环中的每个人定义适当的缩放/范围。我没有依赖qmap
参数,而是想使用min和max lat和long值来设置范围,但在zoom
中似乎不可能。
任何建议都将不胜感激。