plots - Mapa de Cartogram+coropleta en R
plots in r (2)
El package cartogram
, disponible en CRAN, tiene el cartograma de estilo de distorsión de goma que desea.
He estado usando ggplot2 últimamente para crear un grupo de coropletas. Me preguntaba si era posible usar ggplot2 para crear un mapa similar a este (de WorldMapper ):
Es un coroplete donde los polígonos de shapefile se distorsionan para representar recuentos de población relativos. Creo que esto se llama un cartograma. Lo hacen con un montón de otras variables. En el espíritu del Choropleth R Challenge , ¿alguien sabe cómo hacer esto con R?
Esto podría funcionar:
Necesitará preinstalar FFTW. Rcartogram
y getcartr
necesitarás devtools
.
No estoy seguro de cómo hacerlo en ggplot2
, pero aquí hay otra opción.
Aquí estoy usando un shapefile de Thematic World Map , después de descargar y descomprimir, obtendrá una carpeta llamada TM_WORLD_BORDERS-0.3
.
Para el coroplete / cartograma, debería cambiar la forma primero con el tamaño y sombrear con una función:
library(rgdal)#needed for readOGR
library(sp) #needed for spplot
library(Rcartogram)
library(getcartr)
setwd("<your_directory_with_shapefile>") #to the file that has your shapefile and your information file (in this case, a csv named datR)
#read shapefile
#here i have a folder with a shapefile and a csv with columns as ISO (IS02 for convenience) country and value
worldR <- readOGR(dsn = getwd(), layer= "TM_WORLD_BORDERS-0.3") # If reading a shapefile, the data source name (dsn= argument) is the folder (directory) where the shapefile is, and the layer is the name of the shapefile (without the .shp extension)
#names(worldR) #note how here there are columns for ISO2 (which matches a column named ''iso'' in datR and LAT/LON
#[1] "FIPS" "ISO2" "ISO3" "UN" "NAME" "AREA" "POP2005" "REGION" "SUBREGION" "LON" "LAT"
proj4string(worldR)
datR <- read.csv("datR.csv") #this is a file that has one column called ''score'' and one column called size'':
head(datR)
# iso size score
#1 AE 323 0.9819077
#2 AR 262 0.9591067
#3 AT 7481 0.9987313
#4 AU 5425 0.9837414
#5 BA 31 0.9871938
#6 BB 99 0.9715991
##Merge SpatialPolygonsDataFrame with other info
map_dat <- merge(worldR, datR, by.x="ISO2",by.y="iso")
#remove coordinate reference system arguments
proj4string(map_dat) <- CRS(as.character(NA)) # from here https://github.com/chrisbrunsdon/getcartr/issues/1
world.carto <- quick.carto(map_dat, map_dat$size, blur = 0)
#plot(world.carto) #cartogram without anything
#spplot size, color
my.palette = c("#ff0000", "#ff8000", "#ffff00", "#bfff00","#00ff00") #red, orange, yellow, light green, dark green
spplot(world.carto, ''score'', col.regions = my.palette, cuts = length(my.palette)-1,main="Choropleth of score and cartogram of size")
Esto debería darte una trama similar a esta:
Hice esto de forma apresurada, avíseme si funciona