Графические диаграммы на карте с использованием ggplot2?

Я хотел бы создать barplot для каждого местоположения на карте, используя ggplot2, как это было сделано с помощью xingmowang с базовой графикой и несколькими пакетами:

Let R fly: Visualizing Export Data using R

введите описание изображения здесь

Это связано с вложением миниатюрного сюжета в сюжет .

На данный момент лучшее, что я могу сделать, это совместить значение с размером точки в дрожащей точке сюжета:

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) 

Пример карты с ggplot2

С неэлегантным обходным решением:

 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)) 

введите описание изображения здесь

Обновление 2016-12-23 : ggsubplot больше не поддерживается и архивируется в CRAN :

Пакет ‘ggsubplot’ был удален из репозитория CRAN.>
Раньше доступные версии можно получить из архива.>
Архивировано по 2016-01-11 гг. По просьбе сопровождающего [email protected].

ggsubplot не будет работать с версиями R> = 3.1.0. Установите R 3.0.3 для запуска кода ниже:


Вы действительно можете добиться этого с помощью пакета ggsubplot как 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)) 

Результат: введите описание изображения здесь

Interesting Posts
Давайте будем гением компьютера.