当为分类变量绘制小的倍数时,我使用了以下代码:
ggplot(raw, aes(x = income)) +
geom_bar(aes(y = ..count../sum(..count..), fill = factor(..x..))) +
facet_wrap("workclass")
然而,对于每个换行,它给出了当前数据点在数据集总大小上的频率,而不仅仅是facet_wrap子集。
我需要在此代码中进行哪些更改才能使计数仅在face_wrap子集中运行?
答案 0 :(得分:0)
您需要重新制定数据(即在调用workclass
之前按ggplot()
组创建百分比数据)。这是一种data.table方法。
require(data.table)
rawdt <- data.table(raw)
new_data <- rawdt[, .N, by = .(income, workclass)][, classN := sum(N), by = workclass][, y := N/classN]
ggplot(new_data, aes(x = income, y = y)) + geom_bar(stat = "identity") +
facet_wrap(~workclass)
答案 1 :(得分:0)
您可以使用dplyr
例如,您在mtcars
数据集上的代码:
ggplot(mtcars,aes(x = gear)) +
geom_bar(aes(y = ..count../sum(..count..), fill = factor(..x..))) +
facet_wrap("cyl")
重新制定数据,例如@ amatsuo_net&#39;解决方案,但dplyr
:
library(dplyr)
mtcars2 <- inner_join(mtcars %>%
group_by(cyl) %>%
summarise(total = n()),
mtcars %>%
group_by(gear,cyl) %>%
summarise(sub_total = n()),
by = "cyl") %>%
mutate(prop = sub_total/total)
ggplot(data = mtcars2, aes(x = gear,y=prop)) +
geom_bar(stat = "identity") +
facet_wrap(~cyl)