Trazando gráficos de barras en el mapa usando ggplot2?

Me gustaría producir un gráfico de barras para cada ubicación en un mapa usando ggplot2, como lo hizo xingmowang con gráficos básicos y una serie de paquetes:

Let R fly: Visualizing Export Data using R

enter image description here

Esto está relacionado con Incrustar un diagtwig en miniatura dentro de un diagtwig .

Por el momento, lo mejor que puedo hacer es hacer coincidir el valor con el tamaño del punto en un gráfico de puntos con jitter:

require(ggplot2) require(maps) #Get world map info world_map <- map_data("world") #Creat a base plot p <- ggplot() + coord_fixed() #Add map to base plot base_world <- p + geom_polygon(data=world_map, aes(x=long, y=lat, group=group)) #Create example data geo_data <- data.frame(long=c(20,20,100,100,20,20,100,100), lat=c(0,0,0,0,0,0,0,0), value=c(10,30,40,50,20,20,100,100), Facet=rep(c("Facet_1", "Facet_2"), 4), colour=rep(c("colour_1", "colour_2"), each=4)) #Creat an example plot map_with_jitter <- base_world+geom_point(data=geo_data, aes(x=long, y=lat, colour=colour, size=value), position="jitter", alpha=I(0.5)) #Add faceting map_with_jitter <- map_with_jitter + facet_wrap(~Facet) map_with_jitter <- map_with_jitter + theme(legend.position="none") print(map_with_jitter) 

Ejemplo de diagrama de mapa con ggplot2

Con una solución poco elegante:

 subset_data <- geo_data[geo_data$Facet=="Facet_1" & geo_data$long=="20",] subplot <- qplot(data=subset_data, x=colour, y=value, fill=colour, geom="bar", stat="identity")+theme(legend.position="none") print(base_world) print(subplot, vp=viewport((200+mean(subset_data$long))/400,(100+mean(subset_data$lat))/200 , .2, .2)) 

enter image description here

Actualización del 2016-12-23 : el ggsubplot ya no se mantiene activamente y está archivado en CRAN :

El paquete ‘ggsubplot’ se eliminó del repository CRAN.>
Las versiones anteriormente disponibles se pueden obtener del archivo.>
Archivado en 2016-01-11 según lo solicitado por el responsable [email protected].

ggsubplot no funcionará con las versiones R> = 3.1.0. Instale R 3.0.3 para ejecutar el siguiente código:


De hecho, puede lograr esto por medio del paquete ggsubplot como sugiere Baptiste.

 library(ggsubplot) library(ggplot2) library(maps) library(plyr) #Get world map info world_map <- map_data("world") #Create a base plot p <- ggplot() + geom_polygon(data=world_map,aes(x=long, y=lat,group=group)) # Calculate the mean longitude and latitude per region, these will be the coördinates where the plots will be placed, so you can tweak them where needed. # Create simulation data of the age distribution per region and merge the two. centres <- ddply(world_map,.(region),summarize,long=mean(long),lat=mean(lat)) mycat <- cut(runif(1000), c(0, 0.1, 0.3, 0.6, 1), labels=FALSE) mycat <- as.factor(mycat) age <- factor(mycat,labels=c("<15","15-30","20-60",">60")) simdat <- merge(centres ,age) colnames(simdat) <- c( "region","long","lat","Age" ) # Select the countries where you want a subplot for and plot simdat2 <- subset(simdat, region %in% c("USA","China","USSR","Brazil", "Australia")) (testplot <- p+geom_subplot2d(aes(long, lat, subplot = geom_bar(aes(Age, ..count.., fill = Age))), bins = c(15,12), ref = NULL, width = rel(0.8), data = simdat2)) 

Resultado: enter image description here

Intereting Posts