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.

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.

If you have a query related to it or one of the replies, start a new topic and refer back with a link.