我面临一个问题。我想在RStudio中绘制所有四个变量。在这里,我似乎有2组3个变量和一个Count。但是,不知道如何使用ggplot2执行此操作。在xlim轴上应为age_band和sex。在y轴上计数被录取和未被录取的人数。我希望图例在叠加的条形图下面。波纹管由于分析和数据的机密性,我添加了绘制的图片。有人可以帮忙吗?我已经搜索了stackoverflow,却找不到很好的可复制代码
这是我经过操纵技术获得的两种数据。
第一类数据:
<application>
第二种数据:
<webApplication>
答案 0 :(得分:6)
要将住院病人的列叠加到非住院病人上,您可以采用两种方法过滤数据。我在一开始就将美学定义为一个通用的填充项。
library(tidyverse)
ggplot(my_data2, aes(age_band, Count, fill = sex_patient_class)) +
geom_col(data = filter(my_data2, sex_patient_class %in% c("male_not_admitted", "female_not_admitted")),
position = position_dodge()) +
geom_col(data = filter(my_data2, sex_patient_class %in% c("male_admitted", "female_admitted")),
position = position_dodge(0.9), width = 0.5) +
scale_fill_manual(name = "",
breaks = c("male_admitted", "male_not_admitted",
"female_admitted", "female_not_admitted"),
labels = c("Male Admitted", "Male Not admitted",
"Female Admitted", "Female Not admitted"),
values = c("grey80", "black", "red", "orange"))
详细说明
实际的叠加发生在两个geom_col
调用中。呼叫的顺序很重要,因为第二个在第一个上方绘制。因此,我们从“后退”列开始:
对于filter
,我们仅选择不准入院的患者,并将其用作geom_col
的数据。我们不需要重复最初的ggplot
调用的美感,因为如果没有另外指定,则继承。 position_dodge()
在每个年龄组中将各列相邻放置。
p <- ggplot(my_data2, aes(age_band, Count, fill = sex_patient_class)) +
geom_col(data = filter(my_data2, sex_patient_class %in% c("male_not_admitted", "female_not_admitted")),
position = position_dodge())
p
现在将其他列添加到顶部,我们将过滤器语句更改为接受的患者。因为我们希望“前”列比“后”列窄,所以我们指定width=0.5
。
p + geom_col(data = filter(my_data2, sex_patient_class %in% c("male_admitted", "female_admitted")),
position = position_dodge(), width = 0.5)
现在我们快完成了。要将“前”列移动到“后”列的中心,我们需要指定position_dodge()
的宽度。在这种情况下,将它们居中,值为0.9。要位于“保存侧”(即确保该位置确实位于后栏的中心),请为两个geom_col
调用指定相同的闪避宽度。然后,我们更改不太漂亮的颜色(此处为啤酒厂调色板“ Paired”)和图例信息,然后完成:
p + geom_col(data = filter(my_data2, sex_patient_class %in% c("male_admitted", "female_admitted")),
position = position_dodge(0.9), width = 0.5) +
scale_fill_brewer(name = "",
breaks = c("male_admitted", "male_not_admitted",
"female_admitted", "female_not_admitted"),
labels = c("Male Admitted", "Male Not admitted",
"Female Admitted", "Female Not admitted"),
palette = "Paired")