library(ggplot2)
library(ggpol)
library(dplyr)
data <- readxl::read_xlsx("data_new.xlsx", sheet = 1)
data
mydata <- data %>% select(1, 3, 4) %>%
reshape2::melt(id.vars = "Group", variable.name = "Sex", value.name = "Prop")
mydata <- data %>% select(1, 3, 4)
:select(1, 3, 4) 选择数据框 data 中的第1列、第3列和第4列。%>% reshape2::melt(id.vars = "Group", variable.name = "Sex", value.name = "Prop")
reshape2::melt()
函数用于将数据框从宽格式(wide format)转换为长格式(long format),这样更容易进行分析和可视化id.vars = "Group"
指定 “Group” 列作为标识变量,即不进行融化的列。variable.name = "Sex"
指定新生成的列的名称,该列包含了之前选择的列的列名(在这里是 “Sex”)。mydata$Prop <- ifelse(mydata$Sex == "Male", mydata$Prop * -1, mydata$Prop)
ifelse(mydata$Sex == "Male", mydata$Prop * -1, mydata$Prop)
:
mydata$Sex == "Male"
是一个条件表达式,检查 “Sex” 列是否等于 “Male”。
如果条件为真,即 “Sex” 列的值是 “Male”,则执行 mydata$Prop * -1,将 “Prop” 列的值乘以 -1。如果条件为假,即 “Sex” 列的值不是 “Male”,则保持 “Prop” 列的值不变。
ifelse() 函数将根据条件逐元素地应用这个逻辑,生成一个新的列。
mydata$label <- abs(mydata$Prop) %>% round(digits = 2)
head(mydata)
plot <- ggplot(mydata, aes(Prop, Group, fill = Sex)) +
geom_col(width = 0.6, color = "black") +
geom_text(aes(label = label), size = 4) +
facet_share(~Sex, scales = "free_x", reverse_num = TRUE) +
#ggtitle("福建省2021年人口年龄构成") +
labs(x = "Prop(%)",
# 设置 x 轴标签为 "Prop(%)"
caption = "Source:福建省统计年鉴(2022)") +
scale_fill_brewer(palette = "Set1" ) +
theme_bw(base_size = 15) +
theme(axis.title.y = element_blank(),
plot.title = element_text(hjust = 0.5),
axis.text = element_text(colour = "black"))