如何修改R语言dcurves包中决策曲线分析图的线型?
修改dcurves包决策曲线分析图线型的解决方法
你之前用scale_linetype_manual未生效的核心原因是:默认的plot.dca()输出的ggplot对象中,geom_line图层并未将**线型(linetype)**映射到任何变量,因此尺度设置没有作用目标。以下是两种可行的解决方法:
方法一:修改已有ggplot对象的图层映射
先通过plot()生成基础图,再调整图层的美学映射,添加线型绑定,最后自定义线型:
require(dcurves) require(ggplot2) # 生成DCA结果并绘制基础图 p <- dca(cancer ~ cancerpredmarker, data = df_binary) %>% plot(smooth = TRUE, show_ggplot_code = TRUE) # 为geom_line图层添加linetype到variable的映射(variable对应不同曲线:All/None/你的预测模型) p$layers[[1]]$mapping <- aes_add(p$layers[[1]]$mapping, linetype = variable) # 同时设置自定义颜色和线型 p + scale_color_manual(values = c('black', 'grey', 'purple')) + scale_linetype_manual(values = c('solid', 'dashed', 'dotted')) # 顺序需与variable的水平对应
方法二:直接用ggplot代码重绘(更灵活)
利用plot()输出的show_ggplot_code=TRUE打印的代码,修改后自定义绘图:
require(dcurves) require(ggplot2) # 1. 计算DCA结果 dca_res <- dca(cancer ~ cancerpredmarker, data = df_binary) # 2. 获取绘图用的数据框 plot_df <- attr(dca_res, "plot_df") # 3. 自定义绘图,同时绑定颜色和线型映射 ggplot(plot_df, aes(x = threshold, y = net_benefit, color = variable, linetype = variable)) + geom_line(linewidth = 1) + # 保留原plot的线宽设置 labs(x = "Threshold Probability", y = "Net Benefit") + # 原plot的轴标签 theme_bw() + # 原plot的主题 # 自定义颜色和线型,顺序需与plot_df$variable的水平对应 scale_color_manual(values = c('black', 'grey', 'purple')) + scale_linetype_manual(values = c('solid', 'dashed', 'dotted'))
注意事项
- 可以通过
unique(plot_df$variable)查看variable的水平顺序,确保scale_*_manual的values顺序与之匹配 - 支持的线型值包括:
solid、dashed、dotted、dotdash、longdash、twodash等
内容的提问来源于stack exchange,提问作者li jiaqi
相关产品推荐
相关产品推荐

