= --- title: "Code_Figure3.Rmd" output: html_document date: "2023-08-07" --- #1.安装并加载R包 ```{r} #install.packages("tidyverse") #install.packages("ggplot2") #install.packages("scales") library(tidyverse) library(ggplot2) library(scales) ``` #2.加载数据 ```{r} Global_2019_AgeandSex <- read.csv('./data/Global_2019_AgeandSex.csv') ``` #3.数据清洗(3.1字符串;3.2筛选行与列;3.3确定用于作图的变量内部的顺序) ```{R} ##3.1 字符串(如1-4 year)预处理 Global_2019_AgeandSex$age_name <- str_split(Global_2019_AgeandSex$age_name, ' ', simplify = T)[,1] ##3.2 筛选行与列 (20age_groups * 2sex * 2metric = 80) Global_2019_AgeandSex_Prevalance <- Global_2019_AgeandSex %>% select("location_name","year","sex_name","age_name","measure_name","metric_name","val","upper","lower") %>% filter(location_name == "Global", year == "2019", age_name %in% c("1-4","5-9","10-14","15-19","20-24","25-29","30-34","35-39","40-44","45-49","50-54","55-59","60-64","65-69","70-74","75-79","80-84","85-89","90-94","95+"), sex_name %in% c("Male","Female"), measure_name == 'Prevalence', metric_name %in% c('Number', 'Rate')) %>% mutate(val = if_else(metric_name == 'Number', val/1000000,val/(1000*10/3)), #条件表达式if_else upper = if_else(metric_name == 'Number', upper/1000000,upper/(1000*10/3)), lower = if_else(metric_name == 'Number', lower/1000000,lower/(1000*10/3))) ##3.3 确定作图相关的变量(年龄、性别)内部信息的顺序(如 男性、女性 vs 女性、男性) Global_2019_AgeandSex_Prevalance$age_name <- factor(Global_2019_AgeandSex_Prevalance$age_name, levels = c('1-4','5-9','10-14','15-19','20-24','25-29','30-34','35-39','40-44','45-49','50-54','55-59','60-64','65-69','70-74','75-79','80-84','85-89','90-94','95+')) Global_2019_AgeandSex_Prevalance$sex_name <- factor(Global_2019_AgeandSex_Prevalance$sex_name, levels = c('Male', 'Female')) ``` #4.画图(bar + errorbar + line*3 + 坐标轴[xlab, scale_y_continous] +图例 + 主题) ```{r} plot <- ggplot() + # 添加左边纵坐标轴和柱状图 geom_col(data = subset(Global_2019_AgeandSex_Prevalance, metric_name == "Number"), aes(x = age_name, y = val, fill = sex_name), width = 0.6,position = position_dodge(width = 0.6)) + # 添加柱状图的误差线 geom_errorbar(data = subset(Global_2019_AgeandSex_Prevalance, metric_name == "Number"), aes(x = age_name, ymin = lower, ymax = upper, group = sex_name),width = 0.3,position = position_dodge(width = 0.6)) + # 添加折线图(3组,val, lower, upper) geom_line(data = subset(Global_2019_AgeandSex_Prevalance, metric_name == "Rate"), aes(x = age_name, y = val, group = sex_name, color = sex_name),linetype = "dashed",size = 1) + geom_line(data = subset(Global_2019_AgeandSex_Prevalance, metric_name == "Rate"), aes(x = age_name, y = upper, group = sex_name, color = sex_name), linetype = "dashed") + geom_line(data = subset(Global_2019_AgeandSex_Prevalance, metric_name == "Rate"), aes(x = age_name, y = lower, group = sex_name, color = sex_name),linetype = "dashed") + # 手动设置图例,针对左边的纵坐标轴,scale_fill_manual里面的fill对应柱状图,所以图例名称设置为Number scale_fill_manual(name = "Number", values = c("Male" = "#6B58A6", "Female" = "#FCAF17"), guide = "legend") + # 手动设置图例,针对右边的纵坐标轴,scale_color_manual里面的color对应线图,所以图例名称设置为Rate scale_color_manual(name = "Rate", values = c("Male" = "#D30F8C", "Female" = "#0871B9"), guide = "legend") + # 设置主题(背景网格、图例[位置、标题、大小]、坐标轴) theme_bw() + theme(panel.grid.minor = element_blank(), panel.grid.major.x = element_blank(), panel.grid.minor.x = element_blank(), legend.position = 'top', legend.title = element_blank(), legend.key.size = unit(0.3, "cm"), axis.text = element_text(size = 6), axis.text.x = element_text(angle = 30, vjust = 1, hjust = 1), axis.text.y.left = element_text(margin = margin(r = 0)), axis.text.y.right = element_text(margin = margin(r = 0)), axis.title = element_text(size = 8), axis.ticks = element_blank()) + # 设置两个纵坐标轴(主 + 辅助),主纵坐标轴(左边)辅助纵坐标轴(右边)的name、数值关系、范围 scale_y_continuous( name = "Total prevalent cases (millions)", sec.axis = sec_axis(~ .*10/3, name = "Prevalence per 100,000 \n population (000s)"), breaks = seq(0, 18, by = 3), limits = c(0, 18),expand = c(0,0)) + xlab('Age group (years)') ``` #5.文件保存 ```{R} ggsave(plot, file = './output/Prevalence_age_and_sex_2019.pdf',units = 'cm', height = 6, width = 10) ```