2013-03-02 2 views
1

출신 국가 및 연령 그룹별로 이민자 데이터를 덴마크어로 작업하고 있습니다. 데이터를 변형하여 각 연령대의 상위 국가를 확인할 수있었습니다. facet_wrap을 사용하여 플롯하고 있습니다. 각기 다른 연령 그룹이 각기 다른 영역에서 왔기 때문에 각 패싯에서 한 축에 대해 다른 값 집합을 보여주기를 원합니다. 예를 들어 0 세에서 10 세 사이의 사람들은 x, y, z 국가에서 왔고 10-20 세 사람들은 q, r, z 등의 국가에서 왔습니다.facet_wrap의 축 값 변경

현재 버전에서는 상위 10 개국이 아닌 국가를 포함하여 전체 값 집합을 보여줍니다. 각 축마다 원점 상위 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. 따라서 어떤 변수에 대해 묻기 시작하면 이지만은 저울이 다른 것입니다 (아, 또한 각 패널에서 따로 따로 정렬해야합니다). 실제로는 더 이상 패 시팅을하지 않습니다. 그것은 단지 4 개의 서로 다른 플롯을 만들고 함께 정렬합니다. lattice (여기 내가 사용하는``latticeExtra for ggplot2 theme), you can set to 관계를 이용하여

+0

,이 경우에도 꽤 기쁘게 생각 그들은 돈 내가 맞닥뜨린 문제에 대해 생각해 보았는데, 이것은 다른 동물들과 국경을 이루었다 고 생각했지만, 숫자 가늠자가 "자유"로 설정 될 수 있기 때문에 나는 범주 형과 동일하다고 생각했습니다. 다른 컨텍스트에서 사용할 수 있습니다. – ako

1

= 무료 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

Creative 솔루션입니다. 막대 사이에 빈 공간이없는 방법? 처음에는 공백이 단지 하나의 카테고리에 사용 된 카테고리라고 생각했지만 다른 패싯이 아니라면 (실제로 그렇게 부를 수는 있지만) 실제로 아무 관계도없는 것처럼 보이기 때문에 공백이 이상하게 보입니까? – ako

+1

@ako 라벨 문제가 해결되었습니다. 그러나 바 사이의 공간을 수정할 수는 없습니다. 나는'box.ratio' 매개 변수로 연주했습니다 .. – agstudy