R 分组条形图中具有不同字体大小的 x 轴标签的两行

Two lines for x-axis label with different font sizes in R grouped bar chart

我有一个分组条形图,其中 X 轴包含员工类型,例如员工、老师等,我为每个组贴上标签,如下所示

我想把每组下面的数字放在括号内,并使字体变小。这是我到目前为止尝试过的

data <- read.csv("Emp.txt", sep = "\t" , header = TRUE)
df1<-tibble(data)
df1<- mutate(df1, emp_class = cut(Age, breaks = c(0, 19, 22, 25, 28, 31, 34, 52, 75), 
                                  labels = c('(0-19)', '(20-22)', '(23-25)', '(26-28)', '(29-31)', '(32-34)', '(35-52)', '(53-75)'))) 

df1 <- df1 %>% 
  group_by(Emp_group) %>% 
  add_count() 

df1 <- mutate(df1, x_axis = paste(Emp_group, n, sep = "\n"))
my_ggp <- ggplot(df1, aes(x=as.factor(x_axis), fill=as.factor(emp_class)))+
  geom_bar(aes( y=..count../tapply(..count.., ..x.. ,sum)[..x..]*100), position="dodge") + ylab('% Employes') +xlab("") + labs(fill = "Age group") 
df1
my_ggp + theme(text = element_text(size = 20))  

我不知道将不同格式应用于单个轴标签文本的好方法。不过,要在轴标签下方的一行上获取原始计数相对简单。例如:

library(ggplot2)
library(dplyr)

dat <- mtcars %>%
    count(cyl, carb) %>%
    mutate(across(c(cyl, carb), ~ as.factor(.))) %>%
    group_by(cyl) %>%
    mutate(total = sum(n))

dat %>%
    ggplot(aes(x = cyl, y = n, fill = carb)) +
        geom_col(position = "dodge") +
        scale_x_discrete(labels = function(cyl) {
            total <- unique(pull(filter(dat, cyl == cyl), total))
            paste0(cyl, "\n (n = ", total, ")")
        })

想法是使用 scale_x_discrete 中的函数(或任何 scale_x_... 类型的数据)。该函数接受中断,在本例中为 c(4, 6, 8),而您的数据为 c("Custodian", "Staff", "Teacher")。然后你用它来找到总值(我已经展示了一种方法,有很多选择)。最后,您使用 paste 构建轴标签,并使用“\n”指定新行。