首页 > 解决方案 > ggplot 地图上的意外形状

问题描述

我的数据如下所示:数据

ggplot() +
  geom_polygon(data = poland.map.gg, 
               aes(long, lat, group = group, fill = N_mężczyzna))

地图

我想删除那些空白的奇怪形状。

完整代码:

library(rgdal)  

download.file("http://www.gis-support.pl/downloads/wojewodztwa.zip", "wojewodztwa.zip") #ściągamy plik z shapefilem
unzip("wojewodztwa.zip", exdir=".") #rozpakowujemy plik

poland.map <- readOGR(dsn=".", "województwa") #argumentami są nazwa folderu oraz nazwa pliku (nie podajemy rozszerzenia)

poland.map@data <- poland.map@data[ , c(6,16)] #weźmy tylko nazwy województw oraz ich powierzchnie
names(poland.map@data) <- c("nazwa", "powierzchnia") 

#kłopoty z kodowaniem
poland.map@data$nazwa <- c("opolskie", "świętokrzyskie", "kujawsko-pomorskie", "mazowieckie", "pomorskie", "śląskie",
                           "warmińsko-mazurskie", "zachodniopomorskie", "dolnośląskie", "wielkopolskie", "łódzkie",
                           "podlaskie", "małopolskie", "lubuskie", "podkarpackie", "lubelskie")


library(ggplot2)
library(rgeos)
library(maptools)
poland.map.gg <- fortify(poland.map, region="nazwa")
km_woj <- read.table(file="clipboard", header = T)
head(poland.map.gg)
poland.map.gg <- merge(poland.map.gg, km_woj, by.x="id", by.y="Województwo", 
                       sort=F)
ggplot()+geom_polygon(data=poland.map.gg, aes(long, lat, group=group,
                                              fill=N_mężczyzna))

km_woj 是一个数据框,如下所示: km_woj

标签: rggplot2maps

解决方案


尝试使用sfpackage 而不是rgeos. 并从dplyr. 最好不要在变量名中使用波兰字母 :)

完整代码:

library(tidyverse)
library(sf)

download.file("http://www.gis-support.pl/downloads/wojewodztwa.zip", "wojewodztwa.zip") #ściągamy plik z shapefilem
unzip("wojewodztwa.zip", exdir=".") #rozpakowujemy plik

# fake km_woj table:
km_woj <- tibble(Wojewodztwo =  c("opolskie", "świętokrzyskie", "kujawsko-pomorskie", "mazowieckie", "pomorskie", "śląskie", "warmińsko-mazurskie", "zachodniopomorskie", "dolnośląskie", "wielkopolskie", "łódzkie", "podlaskie", "małopolskie", "lubuskie", "podkarpackie", "lubelskie"),
             N_mezczyzna = rnorm(16, 100, 10))


poland.map <- read_sf("województwa.shp")

poland.map <- poland.map %>% select(nazwa = jpt_nazwa_, geometry)

#kłopoty z kodowaniem
poland.map$nazwa <- c("opolskie", "świętokrzyskie", "kujawsko-pomorskie", "mazowieckie", "pomorskie", "śląskie", "warmińsko-mazurskie", "zachodniopomorskie", "dolnośląskie", "wielkopolskie", "łódzkie", "podlaskie", "małopolskie", "lubuskie", "podkarpackie", "lubelskie")


poland.map

poland.map.gg <- left_join(poland.map, km_woj, by = c("nazwa" = "Wojewodztwo"))

poland.map.gg

ggplot() +
  geom_sf(data = poland.map.gg,
          aes(fill = N_mezczyzna))

推荐阅读