You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言绘制带置信区间双折线图:X轴显示及代码报错求助

问题解决:带置信区间的年龄组比值比折线图绘制错误分析

一、X轴显示数字而非年龄组的问题

你当前代码里,两个数据框的age_group列用的是1:length(age_group),生成的是1到6的数字序列,而非你定义的"18-30"这类分组标签,所以ggplot把X轴识别成了连续数值型变量,自然显示1、2、3...

解决方法:直接将定义好的age_group向量赋值给数据框的age_group列,并且转成因子保留分组顺序(避免ggplot按字母排序):

age_group <- c("18-30", "30-45", "45-60", "60-75", "75-90", "90+")

# 修正数据框的age_group列
df_hosp_adm_can <- data.frame(
  age_group = factor(age_group, levels = age_group),  # 用因子类型锁定顺序
  Number_of_hospitalisation = c(3.1, 11.9, 9.6, 9, 93, 8.9),
  range_days = c(4.3, 19.6, 29.5, 24.3, 25.3, 25.2)
)

df_hosp_adm_non_can <- data.frame(
  age_group = factor(age_group, levels = age_group),
  Number_of_hospitalisation = c(3.1, 3.2, 2.5, 3.3, 4.8, 5.0),
  range_days = c(5.8, 10.9, 14.6, 16.1, 21.2, 14.3)
)

二、修改数据框时出现"aes is missing"报错的问题

你修改的代码存在语法错误:

# 错误写法
df_hosp_adm_non_can <- data.frame(age_group), 
                              Number_of_hospitalisation = 
       c(3.1,3.2,2.5,3.3,4.8,5.0), 
                              range_days = 
      c(5.8,10.9,14.6,16.1,21.2,14.3)
)
  • 提前闭合了data.frame()的括号:data.frame(age_group),这里的右括号多余,所有列参数都要放在括号内部
  • 未给age_group列赋值,应该写成age_group = age_group(或修正后的因子形式)

正确写法参考上面第一个问题的修正代码即可。

完整修正后的代码

library(tidyverse)

age_group <- c("18-30", "30-45", "45-60", "60-75", "75-90", "90+")

df_hosp_adm_can <- data.frame(
  age_group = factor(age_group, levels = age_group),
  Number_of_hospitalisation = c(3.1, 11.9, 9.6, 9, 93, 8.9),
  range_days = c(4.3, 19.6, 29.5, 24.3, 25.3, 25.2)
)

df_hosp_adm_non_can <- data.frame(
  age_group = factor(age_group, levels = age_group),
  Number_of_hospitalisation = c(3.1, 3.2, 2.5, 3.3, 4.8, 5.0),
  range_days = c(5.8, 10.9, 14.6, 16.1, 21.2, 14.3)
)

hosp_adm <- df_hosp_adm_can %>%
  mutate(Group = "Case") %>%
  bind_rows(df_hosp_adm_non_can %>% mutate(Group = "Control")) %>%
  mutate(Group = fct_inorder(Group))

hosp_adm %>% 
  ggplot(aes(x = age_group, y = Number_of_hospitalisation,
             color = Group, fill = Group)) +
  geom_line(aes(group = Group)) +  # 明确分组,确保两条折线正确绘制
  geom_ribbon(aes(
    ymin = Number_of_hospitalisation - range_days,
    ymax = Number_of_hospitalisation + range_days,
    color = NULL
  ), alpha = 0.2) +
  labs(x = "年龄组", y = "比值比")  # 自定义轴标签

补充说明:加上geom_line(aes(group = Group))是因为X轴为因子类型时,需要明确分组规则,避免ggplot无法识别两条折线的归属。

内容的提问来源于stack exchange,提问作者Someone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 16:52:44