在使用 R 创建的地理地图中填充大陆区域

Posted

技术标签:

【中文标题】在使用 R 创建的地理地图中填充大陆区域【英文标题】:Fill continental areas in geographical maps created with R 【发布时间】:2011-09-29 13:42:13 【问题描述】:

我尝试使用 R 中的 maps-package 创建地理地图。我不确定这是否是“首选包”。

我试图绘制一张蓝色背景、白色大陆地区和红色国家边界的世界地图。但似乎,如果不以黑色绘制国家边界,就不可能填充区域。我的错误是什么?

library(maps)

# Show the World map without country border,
# with black continent boundaries on a bluish background 
map("world", interior=F, boundary=T, bg="#ddeeff", col="black")

# Fill continental areas in white
map("world", col="white", interior=F, fill=TRUE, add=T)

# Add country borders in red
map("world", interior=T, boundary=F, col="red", add=T)

使用?map 给我:

fill - 表示是绘制线条还是填充区域的逻辑标志。如果为 FALSE,将绘制每个区域的边界线(但仅绘制一次,用于内部线)。如果为 TRUE,则将使用 col = 参数中的颜色填充每个区域,并且不会绘制 边界线

我的 R 版本是:

平台 x86_64-apple-darwin9.8.0 拱 x86_64 操作系统 darwin9.8.0 系统 x86_64、darwin9.8.0 状态 专业2 未成年人 13.0 2011 年 04月 第 13 天 svn 版本 55427 语言 R version.string R 版本 2.13.0 (2011-04-13)

【问题讨论】:

【参考方案1】:

使用基础图形:

(在黑色边界之上有一定数量的红色过度绘制 - 我找不到完全摆脱这种情况的方法。)

library(maps)
map("world", interior=TRUE, fill=TRUE, boundary=FALSE, col="white", bg="lightblue")
map("world", interior=TRUE, boundary=TRUE, col="red", add=TRUE)

使用ggplot:

(使用ggplot,您可以完全控制所有颜色,并且不会出现过度绘图。但是渲染需要更长的时间......)

library(ggplot2)
library(maps)
mapWorld <- borders("world", colour="red", fill="white")
ggplot() + 
  mapWorld + 
  geom_path() + 
  opts(
    plot.background=theme_rect(fill="lightblue"),
    panel.background=theme_rect(fill="lightblue")
    )

【讨论】:

【参考方案2】:

可以在单个“地图”命令中更改边框颜色:

map("world", fill=TRUE, col="white", bg="lightblue", border="red")

"border='red'" 选项没有在 '?map' 中明确记录,因为它实际上是从 map() 内部调用的 "polygon()" 的直接选项。它是 map() 调用中“...”的一部分。

【讨论】:

【参考方案3】:

使用基础图形:

为了避免过度绘制,您可以在第一次调用中将lty 参数设置为 0 以填充国家/地区而不绘制黑色边界。

library(maps)   
map("world", interior=TRUE, fill=TRUE, boundary=FALSE, col="white", lty=0, bg="lightblue")
map("world", interior=TRUE, boundary=TRUE, col="red", add=TRUE)

【讨论】:

以上是关于在使用 R 创建的地理地图中填充大陆区域的主要内容,如果未能解决你的问题,请参考以下文章

iOS定位的使用:地理/逆地理编码/判断目标经纬度是否在大陆

D3:在 d3 中查找地理多边形的面积

如何获取带有区域和子区域的地图

谷歌地图 API 不在不同的大陆上绘制

在 C# 中获取一个国家的大陆

如何获取用户所在的大陆?