【发布时间】:2020-05-30 14:45:36
【问题描述】:
我对 R 很陌生,正在尝试创建一张我的国家地图,上面覆盖着点(代表城市,点按人口大小)。我已经使用 lat、long 边界使用 geom_sf() 创建了地图,并将其存储为地图。
这是我尝试复制的代码示例,其中城市是一个 df,其中包含 state、pop、lat 和 long 列(没有缺失值):
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]))
}
}
我希望我已经提供了足够的信息 - 如果我还没有,请告诉我。谢谢!
【问题讨论】:
-
minimal reproducible example 的任何机会...?
-
作为一个新的R用户,也许这两个概念会有所帮助:(1)使用ggplot,您在
data参数中提供数据框,并且只提供列名(即@ 987654327@ 而不是cities$long) 在aes内。 (2) R 是“矢量化的”。您通常不需要 for 循环(请参阅 chapter 3)。相反,您提供整个值向量(例如,long、lat和pop是值向量),在这种情况下,函数geom_point只需一次调用即可对所有值进行操作函数。 -
关于为什么只用 for 循环获得最后一点,请参阅 here。
-
@eipi10 谢谢!我看到了哪里出错了,并感谢链接与惰性评估的解释。当然不是我所知道的。第 3 章的介绍让我笑了:“这是说带有 C 口音的 R —— 口音很重。”我觉得暴露了。此外,很高兴了解下一次的最小可重现示例。再次感谢。