【问题标题】:Mapping specific States and Provinces in R在 R 中映射特定的州和省
【发布时间】:2014-06-05 23:53:50
【问题描述】:

我正在尝试使用 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)

这会生成一张包含所需州的地图,但加拿大是一个国家(在我设置的分隔符处截断)。

有没有办法只做我想要的省份?我想我知道如何在此之上绘制点(我将它们作为带有 lat 和 long 数据的 .csv 文件)。

我意识到 (R: creating a map of selected Canadian provinces and U.S. states) 非常相似,但我对那个特定示例的代码有点迷茫,我不需要突出显示任何具体内容。

谢谢

【问题讨论】:

    标签: r plot maps border


    【解决方案1】:

    像这样?

    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)
    

    因此,这使用包 raster 中的 getData(...) 函数从 GADM 站点获取美国各州和加拿大各省的 SpatialPolygonDataFrames。然后它只提取你想要的州(注意相关的属性表字段是NAME_1 并且州/省需要正确大写)。然后我们从两个(子集)地图的边界框计算 x 和 y 限制。最后我们渲染地图。请注意在第二次调用plot(...) 时使用了add=T

    这里有一个ggplot 解决方案。

    library(ggplot2)
    ggplot(us.states,aes(x=long,y=lat,group=group))+
      geom_path()+
      geom_path(data=ca.provinces)+
      coord_map()
    

    这里的优点是ggplot 为您管理层,因此您不必显式计算xlimylim。此外,IMO 在添加附加层方面有更大的灵活性。缺点是,使用诸如此类的高分辨率地图(尤其是加拿大西海岸),它要慢得多

    【讨论】:

    • 就是这样!你真是个天才!为了将来参考,我应该如何寻找这样的代码示例?我从来没有上过 R 或 GIS 的课程,所以我有点摸不着头脑......
    • 来自 GIS 背景,我不确定我能否提供帮助。尝试搜索“R 中的地图”,看看哪些匹配最有帮助。
    • 明白了,感谢您的帮助!只要知道这个问题的公式,将来就会对我有所帮助。
    • @jlhoward 当我尝试 ggplot 时,我收到此错误:为每个多边形定义的区域 为每个多边形定义的区域 eval(expr,envir,enclos)中的错误:找不到对象'long'跨度>
    • bbox() 似乎不再出现在光栅包中。
    猜你喜欢
    • 1970-01-01
    • 2018-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-10
    • 1970-01-01
    • 2010-10-07
    相关资源
    最近更新 更多