geom_text - ggplot title center
ggplot mapa con l (2)
Una opción es mapear el crecimiento al tamaño de algunos puntos trazados en el centroide de los polígonos.
centroids <- as.data.frame(coordinates(world.map))
df <- data.frame(df,centroids)
choropleth <-ggplot() +
geom_map(aes(fill = category, map_id = id),data = df, map =world.ggmap) +
expand_limits(x = world.ggmap$long, y = world.ggmap$lat) +
scale_fill_hue(na.value=NA)
choropleth
choropleth + geom_point(aes(x=V1,y=V2,size=growth),data=df) +
scale_area(range=c(0,3))
O si realmente desea duplicar el código de color, podría colorear los puntos en su lugar. Tenga en cuenta que también puede agregar un mapa de trama de imágenes satelitales con el nuevo paquete OpenStreetMap (plug sin vergüenza).
library(OpenStreetMap)
library(raster)
rastermap <- openmap(c(70,-179),
c(-70,179),zoom=2,type=''bing'')
rastermap <- openproj(rastermap)
autoplot(rastermap,expand=FALSE) +
geom_map(aes(x=70,y=70,fill = category, map_id = id),data = df,
map =world.ggmap) +
expand_limits(x = world.ggmap$long, y = world.ggmap$lat) +
scale_fill_hue(na.value=NA) +
geom_point(aes(x=V1,y=V2,colour=growth),data=df) +
scale_colour_gradient(low = "red", high = "blue",
guide = "colorbar",na.value=NA)
Quiero trazar un mapa mundial usando ggplot2 (v.9), que combina dos piezas si la información. El siguiente ejemplo ilustra:
library(rgdal)
library(ggplot2)
library(maptools)
# Data from http://thematicmapping.org/downloads/world_borders.php.
# Direct link: http://thematicmapping.org/downloads/TM_WORLD_BORDERS_SIMPL-0.3.zip
# Unpack and put the files in a dir ''data''
gpclibPermit()
world.map <- readOGR(dsn="data", layer="TM_WORLD_BORDERS_SIMPL-0.3")
world.ggmap <- fortify(world.map, region = "NAME")
n <- length(unique(world.ggmap$id))
df <- data.frame(id = unique(world.ggmap$id),
growth = 4*runif(n),
category = factor(sample(1:5, n, replace=T)))
## noise
df[c(sample(1:100,40)),c("growth", "category")] <- NA
ggplot(df, aes(map_id = id)) +
geom_map(aes(fill = growth, color = category), map =world.ggmap) +
expand_limits(x = world.ggmap$long, y = world.ggmap$lat) +
scale_fill_gradient(low = "red", high = "blue", guide = "colorbar")
Sin embargo, esta solución no es una buena manera de mostrar tanto el growth
como la category
. Growth
es muy visible, pero la category
es casi imposible de ver porque es solo un borde.
He tratado de aumentar el tamaño de las fronteras, pero sin suerte (es difícil trabajar con el nuevo geom_map). ¿Alguien sabe cómo aumentar el tamaño del borde en el ejemplo anterior, o incluso mejor, un mecanismo para mostrar dos factores?
Una pregunta adicional: nombres de países, como los utilizados por el paquete de mapas (¡que presenta la URSS!) Son los datos utilizados en el ejemplo es frágil. Prefiero usar ISO 3166-1 alpha-3 ( 1 ). ¿Alguien sabe datos fácilmente utilizables con ggplot2 que cuenta con nombres de países ISO -... (incluidos en los datos vinculados)?
Resultado:
Yo usaría diferentes rangos de tono para el color de relleno y línea:
ggplot(df, aes(map_id = id)) +
geom_map(aes(fill = growth, color = category), map =world.ggmap) +
expand_limits(x = world.ggmap$long, y = world.ggmap$lat) +
scale_fill_gradient(high = "red", low = "white", guide = "colorbar") +
scale_colour_hue(h = c(120, 240))
O bien, use el relleno para la categoría y la transparencia para el nivel de crecimiento.
ggplot(df, aes(map_id = id)) +
geom_map(aes(alpha = growth, fill = category), map =world.ggmap) +
expand_limits(x = world.ggmap$long, y = world.ggmap$lat) +
scale_alpha(range = c(0.2, 1), na.value = 1)
Depende de lo que quieras mostrar.
Por las dudas, esta es la forma de cambiar el tamaño lineal:
ggplot(df, aes(map_id = id)) +
geom_map(aes(fill = growth, color = category, size = factor(1)), map =world.ggmap) +
expand_limits(x = world.ggmap$long, y = world.ggmap$lat) +
scale_fill_gradient(high = "red", low = "white", guide = "colorbar") +
scale_colour_hue(h = c(120, 240)) +
scale_size_manual(values = 2, guide = FALSE)
Aquí está la versión HSV:
df$hue <- ifelse(is.na(df$category), 0, as.numeric(df$category)/max(as.numeric(df$category), na.rm=T))
df$sat <- ifelse(is.na(df$growth), 0, df$growth/max(df$growth, na.rm=T))
df$fill <- ifelse(is.na(df$category), "grey50", hsv(df$hue, df$sat))
ggplot(df, aes(map_id = id)) +
geom_map(aes(fill = fill), map =world.ggmap) +
expand_limits(x = world.ggmap$long, y = world.ggmap$lat) +
scale_fill_identity(guide = "none")