如何防止 ggplot2 (GADM) 绘制所选州以外的地区

Posted

技术标签:

【中文标题】如何防止 ggplot2 (GADM) 绘制所选州以外的地区【英文标题】:How to prevent ggplot2 (GADM) from plotting districts outside the selected State 【发布时间】:2022-01-21 10:11:31 【问题描述】:

我正在使用 GADM 绘制印度马哈拉施特拉邦的地图。我使用了一个地区名称的子集来映射这些地区。但是我发现其他州的同名区也在画。我该如何解决这个问题。 谢谢

我使用以下代码来准备情节。

 library(ggplot2)
    library(broom)
    library(scales)
    library(sp)
    library(maptools)

ind2 <-  getData("GADM", country = "IND", level = 2)

ind2_df <- tidy(ind2, region = "NAME_2") 
  
mh <- subset (ind2_df, 
                  id == 'Ahmadnagar' |
                  id == 'Gadchiroli' |
                  id == 'Latur' |
                  id == 'Parbhani' |
                  id == 'Mumbai Suburban' |
                  id == 'Akola' |
                  id == 'Amravati' |
                  id == 'Aurangabad' |
                  id == 'Bid' |
                  id == 'Bhandara' |
                  id == 'Buldana' |
                  id == 'Chandrapur'|
                  id == 'Dhule'|
                  id == 'Gondia'| 
                  id == 'Hingoli'|
                  id == 'Jalgaon'|
                  id == 'Jalna'|
                  id == 'Kolhapur'|
                  id == 'Mumbai City'|
                  id == 'Nagpur'|
                  id == 'Nanded'|
                  id == 'Nandurbar'|
                  id == 'Nashik'|
                  id == 'Osmanabad'|
                  id == 'Palghar'|
                  id == 'Pune'|
                  id == 'Raigarh'|
                  id == 'Ratnagiri'|
                  id == 'Sangli'|
                  id == 'Satara'|
                  id == 'Sindhudurg'|
                  id == 'Solapur'|
                  id == 'Thane'|
                  id == 'Wardha'|
                  id == 'Washim'|
                  id == 'Yavatmal')

                

质心数据,我使用上述相同的标准进行转租。

centroid <-  as.data.frame(coordinates(ind2))
colnames(centroid) = c("long","lat")
centroid$id <-  ind2@data$NAME_2
centroid <- subset ( SAME AS the ABOVE)

  
plot2 <- ggplot()+
  geom_polygon(data = mh, aes( long, lat, group = group,  fill = id ))+
  geom_text(data = centroid, aes(x = long, y = lat, label = id),
            size = 4,
            check_overlap = T)+
  theme_void()+
  theme(aspect.ratio=1)
                                                                                                                                        

【问题讨论】:

【参考方案1】:

使用sf简单特征方法可能更好...

根据 OP 评论修改答案。

library(ggplot2)
library(dplyr)
library(sp)
library(sf)
library(raster) # getData


ind_sf <- 
  getData("GADM", country = "IND", level = 2) %>% 
  st_as_sf() %>% 
  filter(NAME_1 == "Maharashtra") %>% 
  mutate(lab_x =  )



ggplot(ind_sf)+
  geom_sf(aes(fill = NAME_2))+
  geom_sf_text(aes(label = NAME_2),
               size = 3,
               fun.geometry = st_centroid)+
  theme_void()+
  theme(aspect.ratio = 1,
        legend.position = "bottom")

由reprex package (v2.0.1) 于 2021-12-19 创建

【讨论】:

谢谢,我对远离该州(马哈拉施特拉邦)的那两个地区(奥兰加巴德和赖加尔)有意见。我想删除这两个区。这两个区属于其他一些州。他们出现在这里可能我们在不同的州有同名的地区。如何删除这两个不属于该州的地区。 感谢您的解释。请参阅修改后的答案。 谢谢,我学到的比我想要的要多。

以上是关于如何防止 ggplot2 (GADM) 绘制所选州以外的地区的主要内容,如果未能解决你的问题,请参考以下文章

R/GIS:用其他来源的数据覆盖 GADM 数据?

如何在 ggplot2 中正确绘制投影网格数据?

如何使用 ggplot2 为散点图绘制多条趋势线?

R:如何在 ggplot2 中绘制 svm 的超平面和边距?

如何在闪亮中使用 ggplot2 绘制数据框的子集

如何使用ggplot2随着时间的推移绘制p值?