Графические диаграммы на карте с использованием ggplot2?
Я хотел бы создать штрих-код для каждого местоположения на карте, используя ggplot2,
как это было сделано xingmowang с базовой графикой и несколькими пакетами:
http://nzprimarysectortrade.wordpress.com/2011/10/02/let-r-fly-visualizing-export-data-using-r/
![enter image description here]()
Это связано с Встраивание миниатюрного сюжета в сюжет.
На данный момент лучшее, что я могу сделать, это совместить значение с размером точки в дрожащем графике точки:
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)
![Example map plot with 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))
![enter image description here]()
Ответы
Ответ 1
Обновление 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))
Результат: ![enter image description here]()