我有一个包含53个状态和性别变量的数据框。例如下面的DF有26个州。
set.seed(25)
test <- data.frame(
state = sample(letters[1:26], 10000, replace = TRUE),
sex = sample(c("M","F"), 10000, replace = TRUE)
)
现在我想看看哪个州有更多的女性成员,所以我在网格中为每个州创建了一个条形图,每个网格都有两个条形(M,F)。
test.pct = test %>% group_by(state, sex) %>%
summarise(count=n()) %>%
mutate(pct=count/sum(count))
ggplot(test.pct, aes(x=sex, y=pct, fill=sex)) +
geom_bar(stat="identity") +
facet_grid(. ~ state)
问题是所有这26个网格都出现在单行 - 可见性问题中。我想用多帧构造图,例如3X9而不是1X26。
此外,应根据女性百分比订购州。
感谢您的帮助。
答案 0 :(得分:0)
问题#1:使用facet_wrap
。问题#2:事先重新排序状态级别。
看起来像这样:
ggplot(transform(test.pct, state=factor(state,
levels=with(subset(test.pct, sex=="F"),
state[order(pct)]))),
aes(x=sex, y=pct, fill=sex)) +
geom_bar(stat="identity") +
facet_wrap(~ state, nrow = 3)
答案 1 :(得分:0)
第一部分很简单:只使用facet_wrap
代替facet_grid
。排序有点棘手;你必须重新排序因子的水平。为了让它更清晰一些,我将操作分成几步。首先,仅提取女性百分比,然后找到这些百分比的顺序,最后使用该顺序重新排列state
级别的顺序。这是一种冗长的做法,但我希望它能使原则明确。
wom.pct <- test.pct %>% filter(sex == 'F')
ix <- order(wom.pct$pct)
test.pct$state <- factor(test.pct$state, levels = letters[1:26][ix])
ggplot(test.pct, aes(x=sex, y=pct, fill=sex)) +
geom_bar(stat="identity") +
facet_wrap( ~ state)