如何用ggplot2绘制堆叠条形图对比多模型特征重要性分解结果?
实现三种模型特征重要性的堆叠条形图对比
当然可以实现这个需求,以下是具体的实现步骤和代码:
步骤说明
- 移除不需要的
y列:该列是模型的总解释值,堆叠条形图仅需各特征的分解贡献值 - 重塑数据格式:将宽格式数据转换为长格式,这是ggplot绘制堆叠图的标准数据格式
- 绘制堆叠条形图:利用
geom_bar的position="stack"参数实现堆叠效果,stat="identity"直接使用数据中的数值作为条形高度
完整实现代码
# 加载所需工具包 library(tibble) library(reshape2) library(ggplot2) # 构造目标数据集 df <- tibble( methods = c("线性回归", "决策树", "随机森林"), y = c(1, 2, 3), g1 = c(0.3, 0.8, 1.3), g2 = c(0.5, 1, 1), g3 = c(0.2, 0.2, 0.7) ) # 移除无需参与绘图的y列 df <- df %>% select(-y) # 将宽格式数据转换为ggplot适配的长格式 df_melt <- melt(df, id.vars = 'methods') # 绘制堆叠条形图 ggplot(df_melt, aes(x = methods, y = value, fill = variable)) + geom_bar(position = "stack", stat = "identity") + labs(title = "不同模型的特征重要性分解对比", x = "模型方法", y = "特征贡献值", fill = "特征变量") + theme_minimal()
代码细节说明
melt(df, id.vars = 'methods'):以methods为分组标识,将g1/g2/g3等特征列转换为variable(特征名称)和value(贡献数值)的长格式结构position="stack":指定条形图采用堆叠模式,把同一模型下的不同特征贡献值叠加展示- 额外添加的
labs和theme_minimal用于优化图表可读性和美观度,可根据需求自行调整
内容的提问来源于stack exchange,提问作者Buoyant Xu
相关产品推荐
相关产品推荐

