1

我正在处理按原籍国和年龄组划分的丹麦移民数据集。我对数据进行了转换,以便查看每个年龄组的主要原籍国。我正在使用 facet_wrap 绘制它。我想做的是,由于不同的年龄组来自完全不同的地区,因此在每个方面为一个轴显示一组不同的值。例如,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

一种选择(我实际上强烈怀疑您不会满意)是:

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)

(编辑以对每个图表进行排序。)

请记住,faceting 存在的唯一原因是绘制多个具有共同比例的面板。因此,当您开始要求对某个变量进行刻面时,尺度不同(哦,并且还在每个面板上分别对它们进行排序)时,您正在做的实际上不再是刻面。它只是制作四个不同的情节并将它们安排在一起。

于 2013-03-02T22:39:23.987 回答
1

使用lattice(这里我使用 ``latticeExtrafor 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")

在此处输入图像描述

于 2013-03-02T23:21:29.577 回答