如何去除ggplot2绘制生存分析图表时出现的多余异常线条
异常原因
多余线条来自代码里的两处写法错误:
- 全局
ggplot()映射里写了colour=as.factor("Site"),这里传入的是字符串常量"Site",不是数据集中的Site列,相当于凭空生成了一个所有观测值都为"Site"的分组,对应图里多余的单色线条。 geom_point()和geom_path()层里都设置了group=1,这个参数会强制把所有数据点归为同一组连线,无视colour对应的分组设置,导致不同研究位点的点被跨组错误连接。
另外代码里反复用Survival$索引原数据集列,而不是调用已经构建好的my_df里的列,也会加剧ggplot的映射混乱。
最优修复方案
直接修正映射逻辑,移除错误参数即可,修正后代码如下:
my_df <- data.frame( x = Survival$time, y = Survival$`% survival`, group = Survival$Site ) ggplot(my_df, aes(x = x, y = y, colour = group)) + geom_point() + geom_path(na.rm = TRUE) + scale_color_discrete(name = "Site") + xlab("Time in Months") + ylab("Percent Survival") + theme(axis.line = element_line(colour = "black", size = 0.24))
修改点说明:
- 全局美学映射直接引用
my_df中已经整理好的列,不再重复索引原Survival数据框,避免映射冲突 - 删除全局映射里错误的字符串常量colour设置,不再生成多余的无效分组
- 删除geom层里强制全局分组的
group=1参数,ggplot会自动按不同Site分组绘制点和连线,不会出现跨组乱连的线条 - 将
geom_path里不规范的na.value="blank"替换为标准参数na.rm=TRUE,自动剔除缺失值不参与绘图
内容的提问来源于stack exchange,提问作者timeywimey
相关产品推荐
相关产品推荐

