结果图

图形解读

此图使用双坐标的形式来展示数据,并且根据性别添加拟合曲线,作为基础图无多大新意,此图柱图使用Number of Incidence数据绘制而置信区间则使用Incidence Rate绘制

加载R包

library(tidyverse)
sessionInfo()

数据读取

dff <- read_tsv("Global_Incidence.tsv")

数据可视化

dff %>% ggplot(aes(age,val,fill=sex))+ # 使用ggplot2进行绘图,设定x轴为age,y轴为val,填充颜色为sex
  geom_bar(data=dff %>% filter(metric=="Number"),
           stat="identity",
           position = position_dodge())+ # 绘制柱状图,数据过滤metric为"Number",使用position_dodge()来调整柱子的间距
  geom_errorbar(data=dff %>%filter(metric=="Number"),
                aes(ymin=lower,ymax=upper),width=0.1,
                position=position_dodge(width=0.9))+ # 绘制误差条,数据过滤metric为"Number",调整误差条宽度和位置
  scale_y_continuous(
    sec.axis = sec_axis(~.,name="Number of Incidence"),
    expand= expansion(mult = c(0,0.1)),
    labels = function(sec_axis) sec_axis/500)+ # 设置y轴,添加次坐标轴,并缩放标签
  geom_line(data=dff %>% filter(metric=="Rate") %>% 
            mutate(val=val*500),
            aes(group=sex,x=age,y=val,color=sex),
            show.legend = F)+ # 绘制线图,数据过滤metric为"Rate",并将val乘以500,分组为sex
  geom_ribbon(data=dff %>% filter(metric=="Rate") %>% 
              mutate(val=val*500,lower=lower*500,upper=upper*500),
              aes(group=sex,x=age,y=val,ymin=lower,ymax=upper,
                  fill=sex),
              alpha=0.3)+ # 绘制带状区域,数据过滤metric为"Rate",并将val, lower, upper乘以500,设置透明度
  scale_color_manual(values = c("#9986A5","#7294D4"))+ # 手动设置线条颜色
  scale_fill_manual(values=c("#00A08A","#F98400"))+ # 手动设置填充颜色
  labs(y="Incidence Rate")+ # 设置y轴标签为"Incidence Rate"
  guides(x.sec="axis")+ # 添加次坐标轴
  theme_test()+ # 使用theme_test()主题
  #设置主题细节,如轴标题、轴线、刻度线、图例位置等
  theme(axis.title.y.right = element_text(size=10),
        axis.title.y.left = element_text(size=10,color="black"),
        axis.text.y.left = element_text(color="black"),
        plot.margin = unit(c(1,1,1,1),unit="cm"),
        axis.ticks.length.y.right = unit(0.2,"cm"),
        axis.ticks.length.y.left = unit(0.2,"cm"),
        axis.line.y.left = element_line(color="black"),
        axis.ticks.y.left = element_line(color="black"),
        axis.line.y.right  = element_line(color="black"),
        axis.ticks.y.right= element_line(color="black"),
        axis.ticks.x.bottom = element_blank(),
        axis.ticks.x.top = element_blank(),
        axis.text.x.top = element_blank(),
        axis.text.x.bottom = element_text(color="black"),
        axis.line.x.top  = element_line(color="black"),
        axis.title.x.bottom = element_blank(),
        legend.title = element_blank(),
        legend.background = element_blank(),
        legend.key = element_blank(),
        legend.position =c(0.05,0.9))