1

私は、出身国と年齢層別の移民に関するデンマークのデータセットを使用しています。データを変換して、各年齢グループの上位の出身国を確認できるようにしました。facet_wrap を使用してプロットしています。私がやりたいのは、さまざまな年齢層がまったく異なる地域から来ているため、各ファセットの 1 つの軸に対して異なる値のセットを示すことです。たとえば、0 ~ 10 歳の人は国 x、y、z から来ており、10 ~ 20 歳の人は国 q、r、z などから来ています。

私の現在のバージョンでは、上位 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")

移民チャート

4

2 に答える 2

2

1つのオプション(私は実際にあなたが満足しないだろうと強く思う)はこれです:

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)

(各グラフを並べ替えるために編集されました。)

ファセットが存在する唯一の理由は、共通のスケールを共有する複数のパネルをプロットすることであることに注意してください。したがって、ある変数でファセットを要求し始めが、スケールが異なっていた場合(ああ、各パネルで別々に並べ替えることもできます)、実際にはファセットがなくなりました。4つの異なるプロットを作成し、それらを一緒に配置するだけです。

于 2013-03-02T22:39:23.987 に答える
1

using lattice(ここでは ``latticeExtra for ggplot2 theme), you can set torelationship=free between panels. Here I am usingabbreviate = 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")

ここに画像の説明を入力

于 2013-03-02T23:21:29.577 に答える