使用 ggplot2 绘制 shapefile 的伪影

Posted

技术标签:

【中文标题】使用 ggplot2 绘制 shapefile 的伪影【英文标题】:Artifacts in plotting shapefiles with ggplot2 【发布时间】:2014-11-22 16:48:53 【问题描述】:

在尝试从人口普查局 2013 年的 shapefile 中绘制美国县时,生成的图有孔洞/奇怪的填充,尤其是在区域不连续的县周围。我认为这与绘制点的顺序有关,但不确定如何解决。例如,佛罗里达州的一个地块,特别是在 Keys 周围会产生:

library(ggplot2)
library(dplyr)
library(rgdal)

download.file('http://www2.census.gov/geo/tiger/GENZ2013/cb_2013_us_county_500k.zip',
'county.zip')
unzip('county.zip')

uscounties <- readOGR(.,'cb_2013_us_county_500k' )
uscounties@data$id <- rownames(uscounties@data)
countypoints <- fortify(uscounties, region='id')
countydf <- join(countypoints, uscounties@data, by='id')

ggplot(countydf[countydf$STATEFP=='12' ,])+
  aes(long, lat, group=COUNTYNS, fill=STATEFP)+
  geom_polygon()+
  geom_path(color="black")+
  coord_equal()

这是结果图: 佛罗里达只是一个例子。大多数其他州也会在绘图中显示类似的错误。关于如何解决的任何想法?

【问题讨论】:

当我尝试运行您的代码时,我在readOGR(.,'cb_2013_us_county_500k' ) 中收到错误Error in nchar(dsn) : object '.' not found。你能让你的代码可重现吗? 还有,函数join()在哪个包里? 【参考方案1】:

你为什么要设置group=COUNTYNS??使用group=id

ggplot(countydf[countydf$STATEFP=='12' ,])+
  aes(long, lat, group=group, fill=STATEFP)+
  geom_polygon()+geom_path(color="black")+coord_equal()

发问题的时候要多加小心,以免浪费大家的时间。join(...)在包plyr不是dplyr,而且

readOGR(.,"...")

没用,你需要

readOGR(dsn=".",layer="...")

【讨论】:

在类似的问题中,您的解决方案对我有效,但前提是我在代码块中使用group=groupgroup=id 版本仍会生成工件。

以上是关于使用 ggplot2 绘制 shapefile 的伪影的主要内容,如果未能解决你的问题,请参考以下文章

如何使用ggplot2编辑图例的位置

用 shapefile 或 geopandas 绘制蒙面的南极洲

使用 GADM shapefile 为美国地图绘制较粗的州边界和较细的县边界

当我在R中把一个空间数据集绘制在shapefile上时,如何绘制它的坐标?

Shapefile 缩放以使用 geopandas 进行绘图

R:在 shapefile 中的多边形上绘制 .gdb 文件中的点