【问题标题】:Error when trying to plot points on a map尝试在地图上绘制点时出错
【发布时间】:2018-02-20 17:51:19
【问题描述】:

我正在尝试在英国地图上绘制点,其中点的大小会根据数据而变化。

这是我的数据文件的一部分(这是我第一次做一个可重复的例子 - 我在文件的头部使用了 dput 但如果有什么方法可以让我更清楚地做到这一点,或者更好的)。

structure(list(V1 = c("St George's", "Sheffield", "Plymouth", 
"Exeter", "King's College London", "East Anglia"), 
Sample = c(183L, 139L, 106L, 128L, 152L, 178L), 
Total = c(417L, 342L, 350L, 520L, 659L, 875L), 
Response = c(43.9, 40.6, 30.3, 24.6, 23.1, 20.3), 
Lat = c(51.427194, 53.380941, 50.415735, 50.737137, 51.511486, 52.621921), 
Long = c(-0.174503, -1.487947, -4.110571, -3.535147, -0.115997, 1.239176)), 
.Names = c("V1", "Sample", "Total", "Response", "Lat", "Long"), 
row.names = c(NA, 6L), class = "data.frame")

一旦我加载了数据文件,我会这样做:

UK <- map_data(map = "world", region = "UK")

ggplot(data = UK, aes(x = long, y = lat, group = group)) +
  geom_polygon() +
  geom_point(data = unidata, aes(x = Long, y = Lat, size = Response, col = "red")) +
  coord_map()

但是,这给我带来了以下错误:

eval(expr, envir, enclos) 中的错误:找不到对象“组”

英国数据中有一个组,当我在没有 geom_point 行的情况下运行此代码时,我得到了英国的标准地图,所以我假设错误在这一行。但是,geom_point 似乎不需要组。所以我一定是忽略了什么?

【问题讨论】:

    标签: r ggplot2 mapping


    【解决方案1】:

    当您将描述要使用的数据框和列的参数移动到 geom_polygon() 元素时,它会起作用。运行下面的代码,你会得到想要的情节:

    ggplot() +
      geom_polygon(data = UK, aes(x = long, y = lat, group = group)) +
      geom_point(data = unidata, aes(x = Long, y = Lat, size = Response), col = "red") +
      coord_map()
    

    我还将 col = "red" 参数移到了 aes() 括号之外,因此它不会出现在您的图例中。

    【讨论】:

    • 谢谢,这太完美了!出于兴趣,您知道为什么会这样吗?是不是因为一旦添加了 geom_point 的东西(来自不同的数据集), geom_polygon 需要更多的定义,因为不清楚它应该做什么?
    • 我正在阅读 this post,其中有 Hadley Wickham(编写 ggplot2)关于这个问题的一些 cmets,他的解决方案包括在两个数据帧中为 x 和 y 变量使用通用名称。对此进行扩展,我得出了这个解决方案。您在ggplot() 函数中定义的映射似乎适用于所有可视元素,并且由于 unidata 数据框没有组列,因此出现错误。
    • 这是有道理的,而且很有帮助,因为我很确定我过去也遇到过类似的问题。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-23
    • 2019-06-09
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    相关资源
    最近更新 更多