Last active
November 21, 2021 16:03
-
-
Save aolinto/9ed2b579bd6e8bb1ad5d73c4acc6a93b to your computer and use it in GitHub Desktop.
polygons with colors and patterns
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# ==================================== | |
# Polygons with colors and patterns | |
# Author: Antônio Olinto Ávila da Silva | |
# Created: 2021-11-21 | |
# Last edition: | |
# ==================================== | |
# in Linux to install the packages one may need | |
sudo apt install libmagick++-dev | |
sudo apt install libudunits2-dev | |
sudo apt install libssl-dev | |
sudo apt install libgdal-dev | |
# to install ggpattern | |
library("remotes") | |
remotes::install_github("coolbutuseless/ggpattern") | |
# libraries | |
library(sp) | |
library(rgeos) | |
library(ggplot2) | |
library(ggpattern) | |
library(maptools) | |
library(mapproj) | |
# create a spatial grid and polygons | |
grd.area <- GridTopology(cellcentre.offset=c(-47.15,-24.416667),cellsize=c(10/60,10/60),cells.dim=c(4,4)) | |
spp.area <- as.SpatialPolygons.GridTopology(grd.area) | |
proj4string(spp.area) <- CRS("+proj=longlat +datum=WGS84") | |
summary(spp.area) | |
plot(spp.area,axes=T) | |
text(coordinates(spp.area)[,1],coordinates(spp.area)[,2],names(spp.area),cex=2) | |
# check if there are invalid geometries & correct that | |
rgeos::gIsValid(spp.area) #returns FALSE | |
#~ spp.area <- rgeos::gBuffer(spp.area, byid = TRUE, width = 0) | |
#~ rgeos::gIsValid(spp.area) #returns TRUE | |
# prepare data | |
ID <- sapply(slot(spp.area, "polygons"), function(x) slot(x, "ID")) | |
GROUP <- c(rep(c("a","b"),each=2,2),rep(c("c","d"),each=2,2)) | |
VARIABLE <- c(2,4,8,6,3,5,10,7,6,8,14,11,10,8,13,15) | |
dat.data <- data.frame(ID,GROUP,VARIABLE) | |
row.names(dat.data) <- ID | |
# create a spatial polygon dataframe | |
spd.area_data <- SpatialPolygonsDataFrame(spp.area,dat.data) | |
spd.area_data@data | |
summary(spd.area_data) | |
plot(spd.area_data,axes=T) | |
text(coordinates(spd.area_data)[,1],coordinates(spd.area_data)[,2],spd.area_data@data$ID,cex=2) | |
# fortify | |
frt.area_data <- fortify(spd.area_data,region="ID") | |
frt.area_data <- merge(frt.area_data,spd.area_data@data, by.x="id",by.y="ID") | |
summary(frt.area_data) | |
head(frt.area_data) | |
#~ dput(frt.area_data) # export data structue | |
# ggplot map | |
map <- ggplot(frt.area_data,aes(x=long,y=lat,group=id,fill=VARIABLE,map_id=id)) + | |
geom_polygon() + | |
coord_map() + | |
theme_bw(12) + | |
theme(legend.key.size = unit(1, 'cm')) + | |
geom_map_pattern( | |
map = frt.area_data, | |
aes(pattern_type = GROUP), | |
pattern = 'magick', | |
pattern_fill = 'black', | |
pattern_scale = 1.5, | |
pattern_key_scale_factor = 0.7, | |
pattern_alpha = 0.5, | |
colour = 'black', | |
) + | |
expand_limits(x = frt.area_data$long, y = frt.area_data$lat) + | |
scale_pattern_type_discrete(choices = c(a='horizontal', b='left45', c='right45', d='vertical'), | |
guide = guide_legend(override.aes = list(fill = "white"))) | |
map |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment