geom_text的位置参数以设置不同的标签 [英] Position argument of geom_text to set different tags
问题描述
我希望在每个堆叠的条形图中都包含三个标签.我希望它出现在每个栏的顶部,表示每个处理变量(x轴)的观测总数.我希望其他两个标签显示每个性别的观察次数,每个变量位于每个治疗变量内每个性别选项的中间.
I want three tags in each of my stacked bars. One I want it to be at the top of each bar saying the total number of observations per treatment variable (x axis). The other two tags I want them showing the number of observations per gender, to be somehwere in the middle of each Gender option within each treatment variable.
我对geom_text代码有疑问,因为我不知道应该尝试什么位置.我输入了不同的选项,但是当我这样做时,我的图形就会像这样失真.
I have problems with the geom_text code, since I don't know what position I should try. I have input different options, but when I do, my graph is distorted like this.
这是我正在使用的代码
Data1 %>%
count(Treatment, Gender) %>%
ggplot(aes(Treatment, n))+
geom_col(aes(fill = Gender), position = "fill")+
ggtitle("Gender")+
ylab("Fraction")+
theme(axis.text.x = element_text(angle = 90, vjust=0.3, hjust=1))+
scale_fill_manual("Gender",
values = c("Female" = "pink", "Male" = "light blue",
"Other"="coral", "Prefer not to answer"="violet"))+
geom_text(aes(label=n), position=position_stack(vjust=0.5))
如果我已正确阅读其他帖子,position_stack应该将数字放在每个小节内.
If I have read correctly other posts, position_stack should put the numbers inside each bar.
推荐答案
如果cols用position = "fill"
绘制,则geom_text
必须调用相同的position_fill
.
在此示例中,我将使用内置数据集mtcars
的子集,该子集在下面进行了转换.
If the cols are plotted with position = "fill"
then geom_text
must call the same position_fill
.
In this example I will use a subset of the built-in dataset mtcars
, transformed below.
library(ggplot2)
library(dplyr)
Data1 %>%
count(Treatment, Gender) %>%
ggplot(aes(x = Treatment, y = n, fill = Gender)) +
geom_col(position = "fill") +
ggtitle("Gender") +
ylab("Fraction") +
theme(axis.text.x = element_text(angle = 90, vjust=0.3, hjust=1)) +
scale_fill_manual("Gender",
values = c("Female" = "pink", "Male" = "light blue",
"Other"="coral", "Prefer not to answer"="violet")) +
geom_text(aes(label = n), position = position_fill(vjust=0.5))
要将条形图的总和放在顶部,下面的代码还将计算每个Treatment
的条形,并仅保留每个Treatment
组的第一个,将NA
分配给SumN
的其他元素./p>
To put the bars totals on top of them, the following code also computes the totals per Treatment
and keeps only the first per group of Treatment
, assigning NA
to the other elements of SumN
.
Data1 %>%
count(Treatment, Gender) %>%
group_by(Treatment) %>%
mutate(SumN = sum(n),
SumN = c(SumN[1], rep(NA, length(SumN) - 1))) %>%
ungroup() %>%
ggplot(aes(x = Treatment, y = n, fill = Gender)) +
geom_col(position = "fill") +
ggtitle("Gender") +
ylab("Fraction") +
theme(axis.text.x = element_text(angle = 90, vjust=0.3, hjust=1)) +
scale_fill_manual("Gender",
values = c("Female" = "pink", "Male" = "light blue",
"Other"="coral", "Prefer not to answer"="violet")) +
geom_text(aes(label = n), position = position_fill(vjust=0.5)) +
geom_text(aes(y = 1.1, label = SumN), position = position_fill(vjust = 1.2))
数据示例.
Data1 <- mtcars[mtcars$carb %in% 1:4, c("cyl", "carb")]
names(Data1) <- c("Treatment", "Gender")
Data1$Treatment <- factor(Data1$Treatment)
Data1$Gender <- factor(Data1$Gender,
labels = c("Female", "Male", "Other", "Prefer not to answer"))
这篇关于geom_text的位置参数以设置不同的标签的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!