# setwd("path/to/Norpred")  # 已注释：请按本地环境设置工作目录
library(tidyverse)
library(patchwork)
# 读取并查看数据
mydata <- read.csv("path/to/Norpred")

# 过滤数据并排序
mydata <- mydata %>%
  arrange(year, sex, metric, cause, measure,age)

# 检查唯一值
print(unique(mydata$age))
print(unique(mydata$sex))
print(unique(mydata$cause))
print(unique(mydata$measure))

# 将年龄段因子化
mydata$age <- factor(mydata$age,
                     levels = c("20-24 years", "25-29 years", "30-34 years", "35-39 years", "40-44 years"),
                     labels = c("20-24 years", "25-29 years", "30-34 years", "35-39 years", "40-44 years"))

# 将原因因子化，并按特定顺序排序
mydata$cause <- factor(mydata$cause,
                       levels = c("Dysthymia", "Depressive disorders", "Major depressive disorder"))

# 准备number数据
df_number <- mydata %>%
  filter(metric == "Number" & 
           cause %in% c("Depressive disorders", "Dysthymia", "Major depressive disorder") & 
           age %in% c("20-24 years", "25-29 years", "30-34 years", "35-39 years", "40-44 years") & 
           measure == "Incidence")

# 检查过滤后的数据
print(head(df_number))

# 设置颜色
colors <- c("Dysthymia" = "#c6dbef", "Depressive disorders" = "#9ecae1", "Major depressive disorder" = "#3182bd")

# 获取最大值和最小值
max_val <- max(df_number$val, na.rm = TRUE)
min_val <- min(df_number$val, na.rm = TRUE)

# 绘制堆叠金字塔图
p1 <- df_number %>%
  mutate(val = ifelse(sex == "Female", -val, val)) %>%
  ggplot(aes(x = age, y = val, fill = cause)) +
  geom_col(position = "stack") +  # 位置为 stack 上下堆叠
  scale_fill_manual(values = colors) +  # 设置颜色
  scale_y_continuous(breaks = seq(-20000, 10000, by = 2000), labels = abs) +  # 设置Y轴间隔
  xlab('') +
  ylab('') +
  coord_flip() + 
  geom_text(aes(x = 1, y = -6000, label = 'Male'), color = "black", hjust = 1) +  # 将Female标签放置在图表外部的1200位置
  geom_text(aes(x = 1, y = 8000, label = 'Female'), color = "black", hjust = 0) +  # 将Male标签放置在图表外部的1600位置
  geom_hline(yintercept = 0, colour = "black", linetype = "solid", size = 0.5) +  # 添加不超过条形图的水平线
  theme_minimal(base_size = 15) +  # 使用简洁主题
  theme(
    legend.position = "none",  # 调整图例位置到右边
    legend.direction = "vertical",  # 调整图例为竖直排列
    legend.text = element_text(size = 8),  # 调整图例文字大小
    axis.text.x = element_text(size = 8),  # 调整横坐标文字大小
    plot.title = element_text(hjust = 0.5),  # 标题居中
    panel.background = element_rect(fill = "white", color = "black", size = 1),  # 设置面板背景为白色并添加黑色边框
    plot.background = element_rect(fill = "white", color = NA),  # 设置背景为白色
    axis.ticks = element_line(color = "black"),  # 设置刻度线颜色
    axis.line = element_line(color = "black"),  # 设置坐标轴线颜色
    panel.grid.major = element_blank(),  # 删除主要网格线
    panel.grid.minor = element_blank()  # 删除次要网格线
  ) +
  ggtitle("ASIR")  # 添加标题

# 打印图表
print(p1)

# 保存图表
ggsave("1/1990-2021发病率/2021年ASIR.png", plot = p1, width = 10, height = 5, dpi = 300)


# 准备number数据
df_number1 <- mydata %>%
  filter(metric == "Number" & 
           cause %in% c("Depressive disorders", "Dysthymia", "Major depressive disorder") & 
           age %in% c("20-24 years", "25-29 years", "30-34 years", "35-39 years", "40-44 years") & 
           measure == "Prevalence")

# 检查过滤后的数据
print(head(df_number))

# 设置颜色
colors <- c("Dysthymia" = "#c6dbef", "Depressive disorders" = "#9ecae1", "Major depressive disorder" = "#3182bd")

# 获取最大值和最小值
max_val <- max(df_number1$val, na.rm = TRUE)
min_val <- min(df_number1$val, na.rm = TRUE)

# 绘制堆叠金字塔图
p2 <- df_number1 %>%
  mutate(val = ifelse(sex == "Female", -val, val)) %>%
  ggplot(aes(x = age, y = val, fill = cause)) +
  geom_col(position = "stack") +  # 位置为 stack 上下堆叠
  scale_fill_manual(values = colors) +  # 设置颜色
  scale_y_continuous(breaks = seq(-12000, 16000, by = 2000), labels = abs) +  # 设置Y轴间隔
  xlab('') +
  ylab('') +
  coord_flip() + 
  geom_text(aes(x = 1, y = -8000, label = 'Male'), color = "black", hjust = 1) +  # 将Female标签放置在图表外部的1200位置
  geom_text(aes(x = 1, y = 10000, label = 'Female'), color = "black", hjust = 0) +  # 将Male标签放置在图表外部的1600位置
  geom_hline(yintercept = 0, colour = "black", linetype = "solid", size = 0.5) +  # 添加不超过条形图的水平线
  theme_minimal(base_size = 15) +  # 使用简洁主题
  theme(
    legend.position = "none",  # 调整图例位置到右边
    legend.direction = "vertical",  # 调整图例为竖直排列
    legend.text = element_text(size = 8),  # 调整图例文字大小
    axis.text.x = element_text(size = 8),  # 调整横坐标文字大小
    axis.text.y = element_blank(),  # 隐藏纵坐标文字
    plot.title = element_text(hjust = 0.5),  # 标题居中
    panel.background = element_rect(fill = "white", color = "black", size = 1),  # 设置面板背景为白色并添加黑色边框
    plot.background = element_rect(fill = "white", color = NA),  # 设置背景为白色
    axis.ticks = element_line(color = "black"),  # 设置刻度线颜色
    axis.line = element_line(color = "black"),  # 设置坐标轴线颜色
    panel.grid.major = element_blank(),  # 删除主要网格线
    panel.grid.minor = element_blank()  # 删除次要网格线
  ) +
  ggtitle("ASPR")  # 添加标题

# 打印图表
print(p2)
ggsave("1/1990-2021发病率/2021年ASPR.png", plot = p2, width = 10, height = 5, dpi = 300)


# 准备number数据
df_number2 <- mydata %>%
  filter(metric == "Number" & 
           cause %in% c("Depressive disorders", "Dysthymia", "Major depressive disorder") & 
           age %in% c("20-24 years", "25-29 years", "30-34 years", "35-39 years", "40-44 years") & 
           measure == "DALYs (Disability-Adjusted Life Years)")

# 检查过滤后的数据
print(head(df_number2))

# 设置颜色
colors <- c("Dysthymia" = "#c6dbef", "Depressive disorders" = "#9ecae1", "Major depressive disorder" = "#3182bd")

# 获取最大值和最小值
max_val <- max(df_number2$val, na.rm = TRUE)
min_val <- min(df_number2$val, na.rm = TRUE)

# 绘制堆叠金字塔图
p3 <- df_number2 %>%
  mutate(val = ifelse(sex == "Female", -val, val)) %>%
  ggplot(aes(x = age, y = val, fill = cause)) +
  geom_col(position = "stack") +  # 位置为 stack 上下堆叠
  scale_fill_manual(values = colors) +  # 设置颜色
  scale_y_continuous(breaks = seq(-2000, 2000, by = 400), labels = abs) +  # 设置Y轴间隔
  xlab('') +
  ylab('') +
  coord_flip() + 
  geom_text(aes(x = 1, y = -1200, label = 'Male'), color = "black", hjust = 1) +  # 将Female标签放置在图表外部的1200位置
  geom_text(aes(x = 1, y = 1600, label = 'Female'), color = "black", hjust = 0) +  # 将Male标签放置在图表外部的1600位置
  geom_hline(yintercept = 0, colour = "black", linetype = "solid", size = 0.5) +  # 添加不超过条形图的水平线
  theme_minimal(base_size = 15) +  # 使用简洁主题
  theme(
    legend.position = "right",  # 调整图例位置到右边
    legend.direction = "vertical",  # 调整图例为竖直排列
    legend.text = element_text(size = 8),  # 调整图例文字大小
    axis.text.x = element_text(size = 8),  # 调整横坐标文字大小
    axis.text.y = element_blank(),  # 隐藏纵坐标文字
    plot.title = element_text(hjust = 0.5),  # 标题居中
    panel.background = element_rect(fill = "white", color = "black", size = 1),  # 设置面板背景为白色并添加黑色边框
    plot.background = element_rect(fill = "white", color = NA),  # 设置背景为白色
    axis.ticks = element_line(color = "black"),  # 设置刻度线颜色
    axis.line = element_line(color = "black"),  # 设置坐标轴线颜色
    panel.grid.major = element_blank(),  # 删除主要网格线
    panel.grid.minor = element_blank()  # 删除次要网格线
  ) +
  ggtitle("ASDR")  # 添加标题


# 打印图表
print(p3)
ggsave("1/1990-2021发病率/2021年ASDR.png", plot = p3, width = 10, height = 5, dpi = 300)

library(tidyverse)
library(patchwork)

combined_plot <- (p1 + theme(legend.position = "none")) + 
  (p2 + theme(legend.position = "none")) + 
  p3 +
  plot_layout(ncol = 3, guides = "collect") &
  theme(legend.position = "right")

# 显示组合图表
print(combined_plot)

# 保存组合图表
ggsave("1/1990-2021发病率/combined_plot.png", plot = combined_plot, width = 20, height = 5, dpi = 300)


####################1990和2021年对比######################
# 设置工作目录
# setwd("path/to/Norpred")  # 已注释：请按本地环境设置工作目录

# 加载必要的库
library(ggplot2)
library(readxl)

# 读取数据
filtered_data <- read.csv("path/to/Norpred")

# 确认数据结构
str(filtered_data)

# 将 year 列转换为因子类型
filtered_data$year <- as.factor(filtered_data$year)

# 将疾病名称转换为中文
filtered_data$cause <- recode(filtered_data$cause, 
                              "Depressive disorders" = "抑郁症", 
                              "Dysthymia" = "心境恶劣", 
                              "Major depressive disorder" = "重度抑郁")

# 过滤数据，只保留 measure 为 DALYs，年份为1990和2021，疾病为三个特定疾病，性别为 Both 的数据
filtered_data <- filtered_data[filtered_data$measure == "DALYs (Disability-Adjusted Life Years)" & 
                                 filtered_data$cause %in% c("心境恶劣", "抑郁症", "重度抑郁") & 
                                 filtered_data$year %in% c(1990, 2021) &
                                 filtered_data$sex == "Both", ]

# 去除包含 NA 的行
filtered_data <- na.omit(filtered_data)

# 确认数据是否正确过滤
head(filtered_data)

# 定义颜色
colors <- c("1990" = "#FF6347", "2021" = "#4682B4")

# 绘制柱状图并手动添加置信区间
p4 <- ggplot(filtered_data, aes(x = cause, y = ASR, fill = year)) +
  geom_bar(stat = "identity", position = position_dodge(width = 0.8), color = "black") +
  geom_errorbar(aes(ymin = lci, ymax = uci), 
                position = position_dodge(width = 0.8), 
                width = 0.25, 
                color = "black") +
  scale_y_continuous(breaks = seq(0, max(filtered_data$uci), by = 10)) +  # 增加Y轴刻度线
  scale_fill_manual(values = colors) + 
  labs(x = "疾病", y = "每10万人DALYs", fill = "年份") +
  theme_minimal(base_size = 15) +
  theme(
    panel.border = element_rect(color = "black", fill = NA, size = 1),
    panel.background = element_rect(fill = "white", color = NA),
    plot.title = element_text(hjust = 0.5),
    axis.text.x = element_text(angle = 45, hjust = 1),
    plot.background = element_rect(fill = "white", color = NA)
  )

# 显示图表
print(p4)

# 保存图表到指定路径
ggsave("path/to/Norpred", plot = p4, width = 10, height = 30, dpi = 300)
