I'm wondering why the ribbons in this code don't show up

加载必要的包

library(ggplot2)
library(dplyr)
library(scales)
setwd('D:/Users/gbd数据新')

读取数据

data <- read.csv("27age1990_2021all.csv")

筛选出符合要求的行

data1 <- data %>%
filter(measure_name == 'Prevalence' &
metric_name == "Number" &
sex_name != "Both" &
year == "2021" &
location_name == "Global")

data2 <- data %>%
filter(measure_name == 'Prevalence' &
metric_name == "Rate" &
year == "2021" &
sex_name != "Both" &
location_name == "Global")

定义图例顺序

age_order <- c("55-59 years", "60-64 years", "65-69 years", "70+ years")
data1$age_name <- factor(data1$age_name, levels = age_order)
data2$age_name <- factor(data2$age_name, levels = age_order)

合并数据以便绘图

data1$rate <- data2$val
data1$rate_upper <- data2$upper
data1$rate_lower <- data2$lower

计算流行率率的缩放比例(用于双 Y 轴)

scale_factor <- max(data1$val) / max(data2$val)

绘制图表

p <- ggplot(data1, aes(x = age_name)) +

绘制柱状图(流行数量)

geom_bar(aes(y = val, fill = sex_name), stat = "identity", position = "dodge", width = 0.6) +
geom_errorbar(aes(y = val, ymin = lower, ymax = upper, group = sex_name),
position = position_dodge(width = 0.6), width = 0.25, color = "black") +

绘制男性流行率率曲线

geom_line(data = subset(data1, sex_name == "Male"),
aes(y = rate * scale_factor, group = sex_name, color = "Male"), size = 1) +
geom_ribbon(data = subset(data1, sex_name == "Male"),
aes(y = rate * scale_factor, ymin = rate_lower * scale_factor, ymax = rate_upper * scale_factor, fill = "red"),
alpha = 0.1, color = NA) + # 设置条带颜色为透明边框

绘制女性流行率率曲线

geom_line(data = subset(data1, sex_name == "Female"),
aes(y = rate * scale_factor, group = sex_name, color = "Female"), size = 1) +
geom_ribbon(data = subset(data1, sex_name == "Female"),
aes(y = rate * scale_factor, ymin = rate_lower * scale_factor, ymax = rate_upper * scale_factor, fill = "Female"),
alpha = 0.1, color = "black") +
scale_fill_manual(name = NULL, # 删除图例标题
values = c("Male" = "cyan", "Female" = "pink"),
labels = c("Male (number and 95% UI)", "Female (number and 95% UI)"), # 修改图例标签
guide = guide_legend(order = 1)) +
scale_color_manual(name = NULL, # 删除图例标题
values = c("Male" = "cyan", "Female" = "pink"),
labels = c("Male (rate and 95% UI)", "Female (rate and 95% UI)"), # 修改图例标签
guide = guide_legend(order = 2)) +

设置双 Y 轴

scale_y_continuous(name = "Prevalence (Number)",
sec.axis = sec_axis(~ . / scale_factor, name = "Prevalence Rate (per 100,000)")) +

设置标题和标签

labs(x = "Age Group",
y = "Prevalence (Number)") +

设置黑色坐标轴并移除背景网格

theme_minimal() +
theme(
axis.text.x = element_text(angle = 45, hjust = 1),
axis.line = element_line(color = "black"), # 设置坐标轴为黑色
panel.grid.major = element_blank(), # 移除主要网格线
panel.grid.minor = element_blank(), # 移除次要网格线
legend.position = "top", # 将图例放在图片上方
legend.box = "horizontal", # 图例水平排列
legend.title = element_blank(), # 移除图例标题
legend.text = element_text(size = 10) # 图例文本字体大小
)

显示图表

print(p)
print(data1)
measure_id measure_name location_id location_name sex_id sex_name age_id
1 5 Prevalence 1 Global 1 Male 16
2 5 Prevalence 1 Global 2 Female 16
3 5 Prevalence 1 Global 1 Male 17
4 5 Prevalence 1 Global 2 Female 17
5 5 Prevalence 1 Global 1 Male 18
6 5 Prevalence 1 Global 2 Female 18
7 5 Prevalence 1 Global 1 Male 26
8 5 Prevalence 1 Global 2 Female 26
age_name cause_id cause_name metric_id metric_name year val
1 55-59 years 561 Drug use disorders 1 Number 2021 794246.2
2 55-59 years 561 Drug use disorders 1 Number 2021 723705.8
3 60-64 years 561 Drug use disorders 1 Number 2021 451219.2
4 60-64 years 561 Drug use disorders 1 Number 2021 433121.7
5 65-69 years 561 Drug use disorders 1 Number 2021 265494.4
6 65-69 years 561 Drug use disorders 1 Number 2021 278026.7
7 70+ years 561 Drug use disorders 1 Number 2021 286240.5
8 70+ years 561 Drug use disorders 1 Number 2021 390850.9
upper lower rate rate_upper rate_lower
1 946806.2 669543.7 407.8821 486.2287 343.8416
2 856763.1 614615.9 360.0463 426.2428 305.7737
3 545389.8 372456.7 290.1043 350.6497 239.4651
4 518489.8 356394.4 263.2784 315.1704 216.6387
5 321497.6 216556.3 201.3865 243.8669 164.2653
6 327177.5 229837.9 193.0621 227.1925 159.5998
7 329864.2 244440.2 131.6513 151.7153 112.4260
8 454022.8 339011.4 141.1295 163.9397 122.4111

Please post your data so it is easily copied. Run

dput(data1)

and post the output of that.