ggplot2 使用 ...prop... 和按另一个类别分组条形图的问题
Posted
技术标签:
【中文标题】ggplot2 使用 ...prop... 和按另一个类别分组条形图的问题【英文标题】:ggplot2 problems with using ...prop... and grouping bar graph by another category 【发布时间】:2018-06-13 16:05:40 【问题描述】:StudentData <- data.frame(gender = sample( c("male","female"), 100, replace=TRUE),
degree = sample( c("Associates", "Masters", "PhD"), 100, replace=TRUE),
category = sample( c("Audit", "Credit"), 100, replace=TRUE))
在以下数据集中,我正在尝试创建一个条形图,以绘制按性别分隔的具有副学士、硕士或博士学位的样本百分比(使用 facet_grid() 完成)。这是我到目前为止生成的:
StudentData %>% ggplot(., aes(x=degree, group=gender)) +
geom_bar(aes(y=..prop..), stat="count", position=position_dodge()) +
geom_text(aes(label=scales::percent(round(..prop..,2)),
y=..prop..), stat="count", vjust=-.5) +
scale_y_continuous(limits=c(0,1),labels = scales::percent) +
ylab("Percent of Sample") +
facet_grid(~gender)
但是,我还想将每个图表上的“审计”和“信用”组之间的差异并排显示。然而,当我在 ggplot 的美学中添加“fill=category”时,什么都没有改变:
StudentData %>% ggplot(., aes(x=degree, group=gender, fill=category)) +
geom_bar(aes(y=..prop..), stat="count", position=position_dodge()) +
geom_text(aes(label=scales::percent(round(..prop..,2)),
y=..prop..), stat="count", vjust=-.5) +
scale_y_continuous(limits=c(0,1),labels = scales::percent) +
ylab("Percent of Sample") +
facet_grid(~gender)
我意识到这通常是使用geom_bar(stat="identity", position=position_dodge())
完成的,但是当我更改stat="identity"
时,会出现以下错误消息:
Error in FUN(X[[i]], ...) : object 'prop' not found
知道如何制作分面图、使用特殊字符(例如 ..prop..)并向 ggplot2 图表添加另一个填充吗?
【问题讨论】:
我认为,如果您在dplyr
中进行数据操作并在ggplot2
中进行绘图,而不是试图依靠@ 中简单的内置数据操作功能,您将会有更好的运气987654329@做复杂的任务。
Gregor,你能解释一下你建议我将 dplyr 用于哪一部分吗?
计算您想要的任何分组级别的比例。
【参考方案1】:
您可以像这样创建必要的四个group
s(而不是两个):
StudentData %>%
ggplot(., aes(x=degree, group=interaction(gender, category), fill=category)) +
geom_bar(aes(y=..prop..), stat="count", position=position_dodge()) +
geom_text(aes(label=scales::percent(round(..prop..,2)),
y=..prop..), stat="count", vjust=-.5, position=position_dodge(.9)) +
scale_y_continuous(limits=c(0,1),labels = scales::percent) +
ylab("Percent of Sample") +
facet_grid(~gender)
【讨论】:
但是,比例没有意义......它们是如何计算的? @Syrah.Sharpe 显然,每个组的总和为 100%。 @lukeA 我认为他的意思是要有一个图表,所有级别的总和为 100%。interaction()
无论如何都是多余的,因为 group=category
足以产生该输出
在 ggplot2 版本 3.x.x 中,您使用 stat(prop)
代替 ..prop..
以上是关于ggplot2 使用 ...prop... 和按另一个类别分组条形图的问题的主要内容,如果未能解决你的问题,请参考以下文章