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
相关产品推荐
相关产品推荐

