Skip to content

Instantly share code, notes, and snippets.

@aolinto
Last active November 21, 2021 16:03
Show Gist options
  • Save aolinto/9ed2b579bd6e8bb1ad5d73c4acc6a93b to your computer and use it in GitHub Desktop.
Save aolinto/9ed2b579bd6e8bb1ad5d73c4acc6a93b to your computer and use it in GitHub Desktop.
polygons with colors and patterns
# ====================================
# 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