使用 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=group
。 group=id
版本仍会生成工件。以上是关于使用 ggplot2 绘制 shapefile 的伪影的主要内容,如果未能解决你的问题,请参考以下文章
用 shapefile 或 geopandas 绘制蒙面的南极洲
使用 GADM shapefile 为美国地图绘制较粗的州边界和较细的县边界
当我在R中把一个空间数据集绘制在shapefile上时,如何绘制它的坐标?