geom_text的位置参数以设置不同的标签 [英] Position argument of geom_text to set different tags

查看:1482
本文介绍了geom_text的位置参数以设置不同的标签的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我希望在每个堆叠的条形图中都包含三个标签.我希望它出现在每个栏的顶部,表示每个处理变量(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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆