我想在图像上绘制美国地图,然后填写海洋。
这是我的出发点:
library(maps)
library(graphics)
image(x=-90:-75, y = 25:40, z = outer(1:15, 1:15, "+"),
xlab = "lon", ylab = "lat")
map("state", add = TRUE)
但我希望大西洋和墨西哥湾能够以纯色填充。
答案 0 :(得分:19)
好问题!这个怎么样?
library(maps)
image(x=-90:-75, y = 25:40, z = outer(1:15, 1:15, "+"),
xlab = "lon", ylab = "lat")
map("state", add = TRUE)
library(grid)
outline <- map("usa", plot=FALSE) # returns a list of x/y coords
xrange <- range(outline$x, na.rm=TRUE) # get bounding box
yrange <- range(outline$y, na.rm=TRUE)
xbox <- xrange + c(-2, 2)
ybox <- yrange + c(-2, 2)
# create the grid path in the current device
polypath(c(outline$x, NA, c(xbox, rev(xbox))),
c(outline$y, NA, rep(ybox, each=2)),
col="light blue", rule="evenodd")
在阅读了Paul Murrell(grid
)最近R-Journal关于网格路径(pdf here)的文章之后,我遇到了这个问题的解决方案。
记住:
“这不是你画的,不是你画的”-Paul Murrell(R Journal Vol.4 / 2)
答案 1 :(得分:4)
这是通过交叉/差分多边形来完成工作的解决方案的变体。数据集wrld_simpl
可以由任何其他SpatialPolygons *对象替换。
library(maptools)
library(raster)
library(rgeos)
data(wrld_simpl)
x <- list(x=-90:-75, y = 25:40, z = outer(1:15, 1:15, "+"))
## use raster to quickly generate the polymask
## (but also use image2Grid to handle corner coordinates)
r <- raster(image2Grid(x))
p <- as(extent(r), "SpatialPolygons")
wmap <- gIntersection(wrld_simpl, p)
oceanmap <- gDifference(p, wmap)
image(r)
plot(oceanmap, add = TRUE, col = "light blue")
(将地图数据转换为此可能很难,我无法使用maptools::map2SpatialPolygons
轻松完成,需要一些解决方法)
答案 2 :(得分:3)
我可以回答你问题的标题(“我如何在美国地图中为海蓝色?”),尽管不是你问题正文中描述的具体情况(“我想要绘制美国地图在图像上,然后填写海洋“)。
但是,如果对遇到您问题的其他人有用,我会提供此答案。
map(database='state', bg='light blue')
bg
选项为地图的背景提供浅蓝色,包括海洋。