【问题标题】:Spatial Plot in R : how to plot the polygon and color as per the data to be visualizedR中的空间图:如何根据要可视化的数据绘制多边形和颜色
【发布时间】:2014-03-24 13:43:18
【问题描述】:

我一直在尝试在 R 中绘制基于县的 Choropleth 地图,以可视化我的亚利桑那州数据集。

使用来自 arizona.edu(空间图书馆)的县的多边形基础数据绘制专题地图,数据来自 az.gov

它有以下用于绘制 COUNTY 多边形-

library(maptools)
library(rgdal)
library(ggplot2)
library(plyr)
county <- readShapePoly(file.choose())
county@data$id <- rownames(county@data)
county.points <- fortify(county, coords="id")
county.df <- join(county.points, county@data, by="id")
ggplot(county.df) + aes(long,lat,group=group, fill="id") + 
geom_polygon() +
geom_path(color="white") +
coord_equal() +
scale_fill_brewer("County Arizona")

这段代码没有给我任何错误,也没有输出。

我的形状文件来源here

数据源here

【问题讨论】:

  • 尝试将您的 ggplot 代码替换为:ggplot(county.df, aes(long,lat,group=group, fill=id)) + geom_polygon() + geom_path(colour="white")+coord_fixed() 我希望您意识到这只是用基于多边形 ID 的颜色填充多边形。
  • 只是一个澄清问题:您的“数据源”在 2012 年在 AZ 按县划分了婚姻。您是否正在尝试根据该县 2012 年的结婚人数创建一个带有阴影的县的等值线地图??
  • @jihoward - 是的,你没看错。我也在做同样的事情

标签: r plot maps visualization geospatial


【解决方案1】:

我无法解释为什么您的代码没有生成输出 - 有太多可能的原因 - 但这是您想要实现的目标吗?

代码

library(rgdal)
library(ggplot2)
library(plyr)
library(RColorBrewer)
setwd("< directory with all your files >")

map       <- readOGR(dsn=".",layer="ALRIS_tigcounty")
marriages <- read.csv("marriages.2012.csv",header=T,skip=3)
marriages <- marriages[2:16,]
marriages$County <- tolower(gsub(" ","",marriages$County))
marriages$Total  <- as.numeric(as.character(marriages$Total))

data <- data.frame(id=rownames(map@data), NAME=map@data$NAME, stringsAsFactors=F)
data <- merge(data,marriages,by.x="NAME",by.y="County",all.x=T)
map.df <- fortify(map)
map.df <- join(map.df,data, by="id")

ggplot(map.df, aes(x=long, y=lat, group=group))+
  geom_polygon(aes(fill=Total))+
  geom_path(colour="grey50")+
  scale_fill_gradientn("2012 Marriages",
                       colours=rev(brewer.pal(8,"Spectral")), 
                       trans="log", 
                       breaks=c(100,300,1000,3000,10000))+
  theme(axis.text=element_blank(), 
        axis.ticks=element_blank(), 
        axis.title=element_blank())+
  coord_fixed()

说明

要生成等值线图,最终我们需要将多边形与您感兴趣的数据(按县的婚姻总数)相关联。这是一个三步过程:首先我们将多边形 ID 与县名相关联:

data <- data.frame(id=rownames(map@data), NAME=map@data$NAME, stringsAsFactors=F)

然后我们将县名与结婚总数联系起来:

data <- merge(data,marriages,by.x="NAME",by.y="County",all.x=T)

然后我们将结果与多边形坐标数据相关联:

map.df <- join(map.df,data, by="id")

你的具体案例有很多潜在的陷阱:

  1. 您提供的链接是 pdf - 完全没用。但是稍微翻了一下发现Excel file 具有相同的数据。甚至这个文件也需要清理:数据有“,”分隔符,需要关闭,一些单元格有脚注,必须删除。最后,我们必须保存为 csv 文件。
  2. 由于我们要匹配县名,所以名称必须匹配!在 shapefile 属性表中,县名都是小写的,并且已经去除了空格(例如,“Santa Cruz”是“santacruz”。所以我们需要将县名小写并去除空格:

    marriages$County &lt;- tolower(gsub(" ","",marriages$County))

  3. 总计列作为一个因子出现,必须转换为数字:

    marriages$Total &lt;- as.numeric(as.character(marriages$Total))

  4. 您的实际数据存在很大偏差:马里科帕县有 23,600 人结婚,格林利有 50 人。因此,使用线性色标信息量不大。因此,我们使用对数刻度:

    scale_fill_gradientn("2012 Marriages", colours=rev(brewer.pal(8,"Spectral")), trans="log", breaks=c(100,300,1000,3000,10000))+

【讨论】:

  • 感谢您的详细回答,主要问题是评论。感谢您的努力。
猜你喜欢
  • 2020-04-27
  • 1970-01-01
  • 2022-06-10
  • 2014-08-23
  • 1970-01-01
  • 2015-04-09
  • 1970-01-01
  • 2022-01-14
  • 1970-01-01
相关资源
最近更新 更多