使用带有geom_point的for循环将点添加到现有ggplot对象中
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用带有geom_point的for循环将点添加到现有ggplot对象中相关的知识,希望对你有一定的参考价值。
我对R很陌生,正在尝试创建一个国家/地区的地图,上面叠加了点(代表城市,点按人口大小划分)。我已经使用经纬度较长的纬度使用geom_sf()创建了地图,并将其存储为地图。
这是我要复制的代码示例,其中city是带有状态,pop,lat和long列(无缺失值)的df:
map <- map +
geom_point(aes(x = cities$long[1], y = cities$lat[1], size = cities$pop[1])) +
geom_point(aes(x = cities$long[2], y = cities$lat[2], size = cities$pop[2])) +
geom_point(aes(x = cities$long[3], y = cities$lat[3], size = cities$pop[3])) +
geom_point(aes(x = cities$long[4], y = cities$lat[4], size = cities$pop[4])) +
geom_point(aes(x = cities$long[5], y = cities$lat[5], size = cities$pop[5]))
这是我认为可以使用的循环,但似乎每次迭代都会覆盖geom_point,因为我的地图最终以最后一个点结束。当我输出每次迭代的地图时,它仅显示最近的点。
or(i in 1:nrow(cities)){
if(!is.na(cities$lat[i]) && !is.na(cities$long[i])){
map <- map +
geom_point(aes(x = cities$long[i], y = cities$lat[i], size = cities$pop[i]))
}
}
我希望我提供了足够的信息-如果我没有提供的话,请告诉我。谢谢!
答案
无需循环执行此操作。
没有数据就无法复制,但要假设您的城市对象看起来像:
cities <- data.frame(name = ..,
pop = ..,
lat = ...,
long = ...)
并且鉴于您的基本映射是geom_sf
对象,这就是您需要的所有代码。
cities_spatial <- cities %>%
st_as_sf(coords = c("lat","long"), crs = 4326)
map <- map +
geom_sf(data = cities_spatial, aes(size = pop))
选项crs = 4326
是为了确保您的数据以WGS84投影,这是经纬度坐标的标准。如果您的底图map
的投影方式不同,则可能需要使用sf::st_transform(...)
以上是关于使用带有geom_point的for循环将点添加到现有ggplot对象中的主要内容,如果未能解决你的问题,请参考以下文章
NSMutableArray 在 for 循环后不保存添加的项目