【问题标题】:Troubleshooting ggplot()/maps() Runtime Issue解决 ggplot()/maps() 运行时问题
【发布时间】:2015-08-15 06:03:56
【问题描述】:

好的,所以我在创建这张地图时有点吃力。下面的代码给了我this map,这是我真正想要使用的地图。

map(database= "world", ylim=c(15,90), xlim=c(-180,-24), fill = TRUE, projection = 'gilbert')

这是我用来保存地图信息的代码。

map.dat <- map_data(map(database= "world", ylim=c(15,90), xlim=c(-180,-24), fill = TRUE, projection = 'gilbert'))

现在,当我运行以下代码时,它给了我错误“eval(expr, envir, enclos) 中的错误:找不到对象“组”。我不确定那是什么意思。

ggplot(map.dat, aes(x=long, y=lat, group=group, fill=region)) +
  geom_polygon() +
  geom_point(data = basindf, aes(x = basindf$latitude, y = basindf$longitude)) +
  theme(legend.position = "none")

我设置了“group = NULL”和“fill = NULL”,这似乎允许我进行绘图,但它只显示this,这不是我想要的。地图不见了!

我能做些什么来解决这个问题?另外,我想远离点并创建线条。我如何能够根据某个 id 制作线条?

编辑:似乎你们中的一些人需要 basdf 进行故障排除。我在下面添加了前 20 行。

"","id","year","month","date","basin","latitude","longitude","wind speed"
"1","1902276N14266",1902,"October",1902-10-03,"EP",-93.8,14,30
"2","1902276N14266",1902,"October",1902-10-03,"EP",-94,14.5,30
"3","1902276N14266",1902,"October",1902-10-03,"EP",-94.2,15,30
"4","1902276N14266",1902,"October",1902-10-03,"EP",-94.3,15.5,30
"5","1902276N14266",1902,"October",1902-10-04,"EP",-94.4,16,30
"6","1902276N14266",1902,"October",1902-10-04,"EP",-94.5,16.5,30
"7","1902276N14266",1902,"October",1902-10-04,"EP",-94.6,17,30
"8","1902276N14266",1902,"October",1902-10-04,"EP",-94.7,17.5,30
"9","1902276N14266",1902,"October",1902-10-05,"EP",-94.8,18,30
"10","1902276N14266",1902,"October",1902-10-05,"EP",-94.9,18.5,30
"11","1902276N14266",1902,"October",1902-10-05,"NA",-94.9,18.7,35
"12","1902276N14266",1902,"October",1902-10-05,"NA",-94.7,18.8,45
"13","1902276N14266",1902,"October",1902-10-06,"NA",-94.4,18.9,55
"14","1902276N14266",1902,"October",1902-10-06,"NA",-94,19.1,60
"15","1902276N14266",1902,"October",1902-10-06,"NA",-93.7,19.3,65
"16","1902276N14266",1902,"October",1902-10-06,"NA",-93.3,19.5,75
"17","1902276N14266",1902,"October",1902-10-07,"NA",-92.9,19.7,85
"18","1902276N14266",1902,"October",1902-10-07,"NA",-92.5,20,90
"19","1902276N14266",1902,"October",1902-10-07,"NA",-92,20.3,90
"20","1902276N14266",1902,"October",1902-10-07,"NA",-91.5,20.7,90

【问题讨论】:

  • 我有同样的错误@MrFlick,ggplot2 1.0.1,maps 2.3.10。
  • 我已经添加了basdf的前20行。这应该会有所帮助,因为当我将 basdf 转换为前 20 行时仍然会出现错误。

标签: r ggplot2 maps runtime-error


【解决方案1】:

你有两个主要问题。

首先,您遇到的错误是因为您在 ggplot() 调用中指定了 aes(),这意味着这些值会继承到所有层。这意味着它也在尝试在geom_point 层中设置group=,但您没有该层的组。您可以使用

禁用继承的美学
ggplot(map.dat, aes(x=long, y=lat, group=group, fill=region)) +
  geom_polygon() +
  geom_point(data = basindf, aes(x = basindf$latitude, y = basindf$longitude), inherit.aes=FALSE) + 
  theme(legend.position = "none")

或者你可以为每层单独设置 aes

ggplot(map.dat) +
  geom_polygon(aes(x=long, y=lat, group=group, fill=region)) +
  geom_point(data = basindf, aes(x = basindf$latitude, y = basindf$longitude)) + 
  theme(legend.position = "none")

您的另一个问题是您使用投影而不是点数据转换了地图数据。

您可以使用mapproj 转换您的数据,使它们处于相同的规模

ggplot(map.dat) +
  geom_polygon(aes(x=long, y=lat, group=group, fill=region)) +
  geom_point(data = data.frame(mapproject(basindf$latitude, basindf$longitude, "gilbert")), aes(x = x, y = y)) +
  theme(legend.position = "none")

这给了

【讨论】:

  • 啊,这很有帮助。但是,这些点仍然在错误的位置?代码:“map(); points(basindf$latitude,basindf$longitude, pch = 20, col = '#C0000020', lwd = .5)" 有点拥抱北美。
【解决方案2】:

它不起作用的原因是因为您在第一次调用aes 时设置了全局aes 参数,而ggplot2 在geom_points 调用中寻找组和区域并填充点。

这在技术上有效:

library(maps)
library(ggplot2)

ggplot() +
        geom_polygon(data = map.dat, aes(x =long, y = lat, group = group, fill = region)) +
        geom_point(data = basindf, aes(x = latitude, y = longitude)) +
        theme(legend.position = "none")

您可以在右下角看到您的地图,非常小。您想将地图重新​​缩放为纬度/经度,或将数据重新缩放为地图中的任何内容。

编辑查看@MrFlick 的答案以重新调整情节。

【讨论】:

  • 但是位置不对吧?当我这样做时:“map(); points(basindf$latitude,basindf$longitude, pch = 20, col = '#C0000020', lwd = .5)"...它似乎拥抱了地图?
  • 我不确定您的积分应该在哪里 - 您希望它们在哪里?
  • 好吧,这真的很奇怪。所以我一直在对数据值进行子集化。当我选择前 1100 行时,这些点就是它们应该在的位置。但是当我选择前 1200 个或更高时,这些点不会显示在地图上的正确位置。我不知道如何向您发送 csv。 :(
  • 如果它与 ggplot 问题没有直接关系,您应该问另一个问题。尝试找到一个可重现的最小示例,然后根据 csv 的大小,尝试使用 pastebin、dropbox 或将数据的 dput() 粘贴到新问题中。
  • 是的,我认为这是投影的问题。所以我把它删掉了。
猜你喜欢
  • 2015-01-30
  • 2021-10-10
  • 1970-01-01
  • 2021-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多