2013-03-02 3 views
1

Я работаю с датским набором данных о иммигрантах по странам происхождения и возрастной группы. Я преобразовал данные, чтобы я мог видеть лучшие страны происхождения для каждой возрастной группы. Я рисую его с помощью facet_wrap. То, что я хотел бы сделать, состоит в том, что различные возрастные группы происходят из совершенно разных областей, чтобы показать другой набор значений для одной оси в каждом аспекте. Например, те, которые от 0 до 10 лет, поступают из стран x, y и z, в то время как те 10-20 лет происходят из стран q, r, z и т. Д.значения переменных осей в facet_wrap

В моей текущей версии он показывает весь набор значений, в том числе страны, которые не входят в первую десятку. Я хотел бы показать только первую десятку стран происхождения для каждой грани, фактически имеющую разные метки осей для каждый. (И, если возможно, сортировка по максимуму до минимума для каждой грани). Вот то, что я до сих пор:

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

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

+1

@ako Я исправил проблему с ярлыками. Но не может изменять пространство между барами. Я играл с параметром box.ratio. – agstudy