2016-09-09 35 views
2

我想仅绘制this data setethnic变量的外边界。您在此链接下找到的数据集plot_data是来自苏丹的PRIO GRID的shapefile的强化数据集。在ggplot2地图/ geom_polygon中仅绘制外边框

我当前的代码如下所示:

plot_data <- load("plot_data.rdata") 

ggplot(plot_data, 
     aes(x= long, 
      y = lat, 
      group = id)) + 
    geom_polygon() + 
    geom_polygon(data = plot_data %>% 
       filter(!is.na(ethnic)) %>% # subset data with ethnicity only 
       as.data.frame(), 
       aes(color = ethnic)) + 
    coord_equal() 

这给了我下面的输出:

enter image description here

不过,我想删除的沉降区的所有内线指定的种族群体并只绘制该地区的外围边界。

我没有得到this similar problem工作的解决方案。

我可能需要合并之前的我强化shapefile;但是强化之后也许有一种方法。我试图删除重复的坐标,但没有奏效。任何建议将不胜感激。谢谢。

回答

2

其基本思想很简单:您需要将填充和颜色映射到整个绘图的美学效果,然后将颜色映射到较小多边形的美学效果,这样您可以使用与颜色相同的颜色将较小的多边形着色为更大的多边形。这就是摆脱了较小多边形的内线。然后,我在小多边形的美学外增加了大小,以便将红线的宽度增加到可感知的水平。

plot_data <- load("plot_data.rdata") 

library(ggplot2) 

df<-plot_data %>% 
    filter(!is.na(ethnic)) %>% # subset data with ethnicity only 
    as.data.frame()  

ggplot(plot_data, 
     aes(x= long, y = lat, group = id,fill="", color="")) + 
    geom_polygon() + 
    geom_polygon(data = df, 
       aes(color = ethnic), size=1) + 
    geom_polygon(data=df, aes(x= long, y = lat, group = id))+ 
    scale_fill_manual(values="black", guide=F)+ 
    scale_color_manual(name="ethnic", 
       labels=c("","Shaygiyya, Ja'aliyyin and Danagla (Arab)"), 
       values=c("black","red"), 
       breaks = c("NA","Shaygiyya, Ja'aliyyin and Danagla (Arab)")) + 
    coord_equal() 

enter image description here

我的会话信息:

sessionInfo() 
R version 3.3.1 (2016-06-21) 
Platform: x86_64-apple-darwin13.4.0 (64-bit) 
Running under: OS X 10.11.5 (El Capitan) 

locale: 
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8 

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  

loaded via a namespace (and not attached): 
[1] Rcpp_0.12.7  XML_3.98-1.4  proj4_1.0-8  bitops_1.0-6  
[5] MASS_7.3-45  grid_3.3.1   plyr_1.8.3   gtable_0.2.0  
[9] scales_0.4.0  KernSmooth_2.23-15 ggplot2_2.1.0  ash_1.0-15   
[13] RColorBrewer_1.1-2 RJSONIO_1.3-0  tools_3.3.1  RSelenium_1.4.2 
[17] munsell_0.4.3  RCurl_1.95-4.8  maps_3.1.0   colorspace_1.2-6 
[21] caTools_1.17.1 

UPDATE:的OP是有困扰我使用发布的代码产生相同的情节。我有一位朋友在Windows系统(我在El Capitan)使用我在这里提供的相同代码重现了情节,他得到了相同的结果(如下)。

enter image description here

+0

谢谢!但是这对我来说并不合适。我得到的结果是这样的:http://imgur.com/a/DswP0。我正在使用dplyr v0.5&ggplot2 v2.1.0。如果你可以详细阐述一下你的代码背后的思想过程,也许会有所帮助。 – Felix

+0

@Felix,不知道该告诉你什么。我会建议清理你的工作空间并再次尝试。我使用了你提供的数据,并通过RStudio和R运行代码,我也在我的工作站和labtops(两个mac)上运行它 - 一切正常。....你可能会在你的环境中加载ggplot2扩展或主题,也是如此。其基本思想很简单:您需要将填充和颜色映射到整个绘图的美学效果,然后将颜色映射到较小多边形的美学效果,这样,您可以使用与较大多边形颜色相同的颜色多边形... –

+0

......那是什么摆脱了较小的多边形的内线。然后,我在小多边形的美学外增加了大小,以便将红线的宽度增加到可感知的水平。 –