【问题标题】:How to create a tigris map with zip codes shaded based on a value?如何创建底格里斯河地图,其中邮政编码根据值进行着色?
【发布时间】:2023-01-11 11:49:09
【问题描述】:

我正在尝试使用 R 中的 tigris 包制作科罗拉多州道格拉斯县的地图。目标是显示道格拉斯县除以其中的邮政编码,并根据值对每个邮政编码进行着色。我现在数据集中的变量是:邮政编码、城镇和铅级别(连续变量)。

library(tigris)
library(sf)

douglas_zips <- zctas(cb=TRUE, starts_with= c("80108","80109", "80104", "80116", "80126", "80129", "80130", "80118", "80124", "80131", "80134", "80138", "80125", "80135"))
plot(douglas_zips)

当我这样做时,我得到了这个奇怪的情节: zip code map

关于从这里去哪里的任何想法或想法?

【问题讨论】:

    标签: r mapping zipcode tigris


    【解决方案1】:

    这显示了数据框中每一列的那些 zip 区域的地图。数据框的每一行都是一个压缩区域,每一行都有几列信息。默认情况下,绘制这样的对象会为每一列绘制一个地图(达到一个较小的限制)。如果将对象打印出来,您将看到它的数据框性质:

    > douglas_zips
    Simple feature collection with 14 features and 7 fields
    Geometry type: MULTIPOLYGON
    Dimension:     XY
    Bounding box:  xmin: -105.3987 ymin: 39.12947 xmax: -104.5877 ymax: 39.56851
    Geodetic CRS:  NAD83
    First 10 features:
          ZCTA5CE20     AFFGEOID20 GEOID20 NAME20 LSAD20   ALAND20 AWATER20
    5633      80124 860Z200US80124   80124  80124     Z5  24303768     5755
    5760      80135 860Z200US80135   80135  80135     Z5 964291604  4925227
    8362      80129 860Z200US80129   80129  80129     Z5  18234617     9646
    9575      80138 860Z200US80138   80138  80138     Z5 160361611   162369
    12467     80118 860Z200US80118   80118  80118     Z5 339356454   295396
    14329     80131 860Z200US80131   80131  80131     Z5   1436637        0
    16056     80125 860Z200US80125   80125  80125     Z5 101565571  3920161
    24583     80104 860Z200US80104   80104  80104     Z5 183043141        0
    24641     80109 860Z200US80109   80109  80109     Z5  67311248    15254
    24704     80134 860Z200US80134   80134  80134     Z5 148527309   320476
    

    要仅绘制一列,请执行plot(douglas_zips["ZCTA5CE20"])

    【讨论】:

      【解决方案2】:

      来自 Spacedman 的信息是正确的,但 Matt 询问如何在 douglas_zips 功能和包含铅水平列表的单独表之间执行数据连接。

      “连接”是 GIS 和广泛的关系数据库中的基本功能,因此它是一项关键技能。

      我们想要使用我们的 douglas_zips 功能并通过邮政编码匹配 lead_levels 表中的所有记录,将 lead_levels 中的列添加到 douglas_zips。我们可以使用 merge() 来完成它。

      https://www.rdocumentation.org/packages/base/versions/3.6.2/topics/merge

      注意:为来自 tigris 的 ZCTA 指定“cb=TRUE, year=2020”或“cb=FALSE”(默认值)。

      library(tigris)
      library(sf)
      library(plyr)
      
      douglas_zips <- zctas(cb=TRUE, year=2020, starts_with=c("80108","80109", "80104", "80116", "80126", "80129", "80130", "80118", "80124", "80131", "80134", "80138", "80125", "80135"))
      
      ## made up data.frame to simulate what you described as your dataset
      zipcode = c("80108","80109", "80104", "80116", "80126", "80129", "80130", "80118", "80124", "80131", "80134", "80138", "80125", "80135")
      town = c("town1","town2","town3","town4","town5","town6","town7","town8","town9","town10","town11","town12","town13","town14")
      lead_level = c(1,2,3,4,5,6,7,8,9,10,11,12,13,14)
      dataset = data.frame(zipcode, town, lead_level)
      
      douglas_lead_levels <- merge(douglas_zips, dataset, by.x="ZCTA5CE20",by.y="zipcode")
      

      结果将向 d​​ouglas_zips 添加两列:“town”和“lead_level”。

      从那里,我们可以像 Spacedman 解释的那样绘制 lead_level 变量:

      plot(douglas_lead_levels["lead_level"])
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-01-27
        • 2020-04-19
        • 2021-11-14
        • 2019-11-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多