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”指定新行。
我有一个分组条形图,其中 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”指定新行。