使用ggsubplot指定绘图顺序

时间:2013-12-19 15:22:29

标签: r ggplot2

我正在使用ggplot和ggsubplot向地图添加条形图,但无法弄清楚如何指定首先绘制哪个。我想首先绘制北方的阴影,以便它们位于任何重叠的地块后面。使用低填充alpha时,这些仍应可见。这是工作流程:

library(ggsubplot)
library(ggplot2)
library(maps)
library(plyr)

world_map = map_data("world")
(p = ggplot() + geom_polygon(data = world_map, aes(x=long, y=lat,group=group)))

d = ddply(world_map,.(region),summarize,long=mean(long),lat=mean(lat))
d = d[sample(1:nrow(d), 50),]
d = rbind(d,d)
d$cat = rep(c('A','B'), each=nrow(d)/2)
d$value = sample(1:10, nrow(d), rep=T)
head(d)

p + geom_subplot(data=d, aes(long, lat, group=region, subplot = geom_bar(aes(cat, value, fill=cat), 
                 col='black', alpha=0.9, stat="identity")), width = 30, height=30)

enter image description here

正如您所看到的,情节顺序似乎很随机。因此,我尝试将区域(国家/地区)更改为有序因素:

d$region = factor(d$region, ordered=T)
(ord = count(d[,c('region','lat')], vars=c('region','lat')))
ordered_levels = order(ord$lat, decreasing=T)
print(ord[ordered_levels,])
levels(d$region) = levels(d$region)[ordered_levels]
levels(d$region)

p + geom_subplot(data=d, aes(long, lat, group=region, subplot = geom_bar(aes(cat, value, fill=cat), 
                 col='black', alpha=0.9, stat="identity")), width = 30, height=30)

但这似乎没有解决问题。非常感谢任何建议。

2 个答案:

答案 0 :(得分:1)

底层地图在结果图中几乎是一团糟,但这种预订似乎将高纬度物品带到了前面:

world_map = world_map[order(world_map$lat),]

目前尚不清楚您是否希望在靠近赤道的纬度下绘制负纬度,因此您还可以选择使用abs(world_map $ lat)作为顺序。

答案 1 :(得分:1)

这是你的想法吗?

您需要按照您的指示,按纬度排序d,并在调用group=lat时使用geom_subplot(...)

set.seed(1)
d = ddply(world_map,.(region),summarize,long=mean(long),lat=mean(lat))
d = d[sample(1:nrow(d), 50),]
d = rbind(d,d)
d$cat = rep(c('A','B'), each=nrow(d)/2)
d$value = sample(1:10, nrow(d), rep=T)
d <- d[order(d$lat),]
head(d)
p + geom_subplot(data=d, aes(long, lat, group=lat, 
      subplot = geom_bar(aes(cat, value, fill=cat), 
        col='black', alpha=0.9, stat="identity")), width = 30, height=30)