r - 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))
解决方案
尝试使用sf
package 而不是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))
推荐阅读
- javascript - 从 db.json 文件中检索数据并使用 javascript 将其添加到数组中
- awk - 重新排列以相同字符串开头的行
- html - 更改 Google 云端硬盘等内容
- xcode - ios模拟器卡在Virtual Box上的苹果标志上
- python - 如何将 Pika 与 Qt 集成?
- cucumber - 将 BDD 用作前端和后端作为一个项目的测试优先开发方法的流程是什么?
- mongodb - MongoDB查询引用的文档
- tree - 树状依赖图的 OpenCL 执行策略
- ruby-on-rails - 如何将强参数中的嵌套属性与 has_many 关联合并
- clojure - Clojure 中原语和盒装原语的示例