ggplot2 可视化/显示中的地图问题?

4

如下所示,我使用ggplots制作的地图存在一些奇怪的显示问题。似乎任何投影方式都会出现同样的问题。

enter image description here

以下是代码: 只需要安装mapsggplot2这两个包即可。

  mapWorld <- borders("world", colour="gray50", fill="black")
    ggplot() + mapWorld +
      coord_map("mercator") +
      ylim(-90,90)

看起来是数据出了问题,可能是排序问题,也可能不是。当我运行summary(mapWorld$data)时,经度的编码范围似乎是从-179到190... 我本来期望的是-180到180。 - Gregor Thomas
我没有想到那个。我会尝试其他数据。谢谢! - ePoQ
1
我可以复制您的问题,但是?border底部的示例对我来说完全正常。我99%确定这是数据问题,而不是ggplot问题。 - Gregor Thomas
底部的?borders示例对我也很有效。这很奇怪,因为有些人使用borders("world", ...)而没有提到这个问题。 - ePoQ
+coord_equal 添加到绘图中似乎可以解决问题。但我不会将其发布为答案,因为我不确定它是否是一个解决方案,即 coord_map() 中的投影规范是否足够? - shekeine
2个回答

2

显然,问题是由于多边形跨越了0坐标引起的,这是世界合并的地方。 R不知道如何关闭这些多边形,并将它们投影到全球各地。

该方法重新创建多边形并防止其跨越0坐标(xlim和ylim)。 它适用于任何类型的投影。

require(ggplot2)
require(PBSmapping)
require(data.table)

mapWorld <- map_data("world")
setnames(mapWorld, c("X","Y","PID","POS","region","subregion"))
worldmap = clipPolys(mapWorld, xlim=xlim,ylim=ylim, keepExtra=TRUE)
ggplot() + geom_polygon(data = mapWorld, aes(X,Y,group=PID))

这给我抛出了以下错误:Error in .clip(polys, xlim, ylim, isPolygons = TRUE, keepExtra) : (list) 对象无法强制转换为 'double' 类型 - Johan Larsson

1
为什么你需要使用它?
ggplot() + mapWorld +
  coord_map("mercator") +
  ylim(-90,90)

如果你只使用

ggplot() + mapWorld

它工作得非常完美。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接