Pri*_*ion 4 maps plot r border
我正在尝试使用R为我的FieldBio项目生成带有示例区域的图形.到目前为止,我已经能够绘制我想要的美国州,以映射加拿大(国家边界),以覆盖这两张地图; 但是,我想要做的是专门绘制以下州/省,不包括其他州:加利福尼亚州内华达州犹他州科罗拉多州怀俄明州蒙大拿州爱达荷州华盛顿州俄勒冈州不列颠哥伦比亚省艾伯塔省
这是我到目前为止使用的代码:
>map('state', region = c('california', 'nevada', 'utah', 'colorado', 'wyoming', 'montana', 'idaho', 'oregon', 'washington'), xlim=c(-130,-90), ylim=c(30,60), fill=TRUE, col="gray95")
>map("worldHires","Canada", xlim=c(-130,-90), ylim=c(30,60), col="gray95", fill=TRUE, add=TRUE)
Run Code Online (Sandbox Code Playgroud)
这会生成一个具有所需状态的地图,但加拿大作为一个国家(在我设置的分隔符处切断).
有办法只做我想要的省份吗?我想我知道如何在这之后绘制点(我将它们作为带有lat和long数据的.csv).
我意识到(R:创建一个选定的加拿大省和美国各州的地图)非常相似,但我在这个特定的例子的代码中有点迷失,我不需要强调任何特定的东西.
谢谢
jlh*_*ard 11
像这样?

library(raster)
states <- c('California', 'Nevada', 'Utah', 'Colorado', 'Wyoming', 'Montana', 'Idaho', 'Oregon', 'Washington')
provinces <- c("British Columbia", "Alberta")
us <- getData("GADM",country="USA",level=1)
canada <- getData("GADM",country="CAN",level=1)
us.states <- us[us$NAME_1 %in% states,]
ca.provinces <- canada[canada$NAME_1 %in% provinces,]
us.bbox <- bbox(us.states)
ca.bbox <- bbox(ca.provinces)
xlim <- c(min(us.bbox[1,1],ca.bbox[1,1]),max(us.bbox[1,2],ca.bbox[1,2]))
ylim <- c(min(us.bbox[2,1],ca.bbox[2,1]),max(us.bbox[2,2],ca.bbox[2,2]))
plot(us.states, xlim=xlim, ylim=ylim)
plot(ca.provinces, xlim=xlim, ylim=ylim, add=T)
Run Code Online (Sandbox Code Playgroud)
因此,这使用getData(...)包中的函数raster从GADM站点获取美国各州和加拿大省的SpatialPolygonDataFrames.然后它只提取你想要的状态(注意相关的属性表字段,NAME_1并且状态/省需要正确地大写).然后我们从两个(子集)映射的边界框计算x和y限制.最后我们渲染地图.注意add=T在第二次调用中使用plot(...).
这是一个ggplot解决方案.
library(ggplot2)
ggplot(us.states,aes(x=long,y=lat,group=group))+
geom_path()+
geom_path(data=ca.provinces)+
coord_map()
Run Code Online (Sandbox Code Playgroud)

这里的优点是ggplot为您管理图层,因此您不必显式计算xlim和ylim.此外,IMO在添加附加层方面具有更大的灵活性.缺点是,对于这些高分辨率地图(尤其是加拿大西海岸),它要慢得多.
| 归档时间: |
|
| 查看次数: |
9246 次 |
| 最近记录: |