2013-03-02 124 views
1

我正在根据原籍国和年龄段的移民的丹麦数据集。我对数据进行了转换,以便能够查看每个年龄段的主要原始国家。 我正在使用facet_wrap进行绘图。我想要做的是,因为不同年龄段的人来自不同的地区,因此要在每个方面为一个轴显示不同的一组值。例如,0到10岁的人来自x,y和z国,而10到20岁的人来自q,r,z等国家。facet_wrap中的不同轴值

在我当前的版本中,它显示了整个值集合,包括未进入前10名的国家/地区。我想仅显示每个方面的前十个原始国家,实际上具有不同的轴标签每。 (并且,如果可能的话,按每个方面从高到低排序)。 这是我到目前为止有:

library(ggplot2) 
library(reshape) 
###load and inspect data 
load(url('http://dl.dropbox.com/u/7446674/dk_census.rda')) 
head(dk_census) 

###reshape for plotting--keep just a few age groups 
dk_census.m <- melt(dk_census[dk_census$Age %in% c('0-9 år', '10-19 år','20-29 år','30-39 år'),c(1,2,4)]) 

###get top 10 observations for each age group, store in data frame 
top10 <- by(dk_census.m[order(dk_census.m$Age,-dk_census.m$value),], dk_census.m$Age,  head, n=10) 
top10.df<-do.call("rbind", as.list(top10)) 
top10.df 

###plot 
ggplot(data=top10.df, aes(x=as.factor(Country), y=value)) + 
    geom_bar(stat="identity")+ 
    coord_flip() + 
    facet_wrap(~Age)+ 
    labs(title="Immigrants By Country by Age",x="Country of Origin",y="Population") 

immigrant chart

回答

2

一种选择(其实我是非常怀疑你会不会高兴)是这样的:

p <- ggplot(data=top10.df, aes(x=Country, y=value)) + 
    geom_bar(stat="identity")+ 
    coord_flip() + 
    facet_wrap(~Age)+ 
    labs(title="Immigrants By Country by Age",x="Country of Origin",y="Population") 

pp <- dlply(.data=top10.df,.(Age),function(x) {x$Country <- reorder(x$Country,x$value); p %+% x}) 
library(gridExtra) 
do.call(grid.arrange,pp) 

(编辑,以)

请记住,存在的唯一原因是绘制多个面板,其中共享一个共同的sca le。所以当你开始询问一些变量时,但是的尺度是不同的(哦,并且也在每个面板上分别排序),你正在做的事情实际上已经不再面向了。它只是制作四个不同的地块并将它们排列在一起。

+0

其实,我很高兴,这即使他们不我确实考虑过这个问题,并且认为这是一些其他动物的边界,但是因为数字尺度可以设置为“自由”,所以我认为对于分类问题也是如此,gridExtra提示是一个很好的方法我可以在其他情况下使用。 – ako 2013-03-02 22:55:06

1

使用lattice(这里我用``latticeExtra for ggplot2 theme), you can set to关系=免费between panels. Here I am using缩写= TRUE;短长标签。

library(latticeExtra) 


barchart(value~ Country|Age,data=top10.df,layout=c(2,2), 
     horizontal=T, 
     par.strip.text =list(cex=2), 
     scales=list(y=list(relation='free',cex=1.5,abbreviate=T, 
          labels=levels(factor(top10.df$Country)))), 
#   ,cex=1.5,abbreviate=F), 
     par.settings = ggplot2like(),axis=axis.grid, 
     main="Immigrants By Country by Age", 
     ylab="Country of Origin", 
     xlab="Population") 

enter image description here

+0

创意解决方案。一种不在酒吧间留有空白的方法?起初,我认为空白只是一个类别的使用,而不是另一个方面(如果我可以称之为),但他们似乎没有任何关系,所以差距似乎很奇怪? – ako 2013-03-03 00:00:53

+1

@ako我修复了标签问题。但不能修改小节之间的空间。我玩'box.ratio'参数.. – agstudy 2013-03-03 00:57:45