R语言collapsibleTree基于列值为全层级节点分配梯度着色
问题根源
collapsibleTreeSummary默认的着色逻辑和你的需求存在两处核心不匹配:
- 色阶映射默认仅使用原始行级别的
Color列数值范围(0-1)生成,不会自动纳入聚合后的中间节点数值。此时中间节点的聚合值(比如某分支下9个样本全为1,聚合后值为9)会超出默认色阶的映射范围,函数会自动将这类未匹配到映射规则的节点设置为无填充状态,这就是你目前仅能看到最底层Failure节点有颜色的直接原因。 - 默认的聚合规则是对同组的attribute值取总和,而非计算能代表分支整体失败类型占比的统计值,会导致中间节点的Color值随样本数量线性增长,无法实现0-1区间的梯度映射效果。
实现全链路梯度着色的操作步骤
1. 替换默认聚合规则
给函数传入aggregation参数,指定中间节点的Color值为下属所有叶子节点的Color平均值:
- 所有下属节点全为1的分支,节点Color值为1,对应预设的绿色
- 所有下属节点全为0的分支,节点Color值为0,对应预设的红色
- 同时包含0和1的混合分支,节点Color值落在0-1区间,对应红到绿的过渡梯度
这套计算逻辑完全匹配你的着色需求:Headed Bar Coupler分支下所有样本的失败类型都是Bar fracture(对应Color=1),整支路径从根节点到叶节点的Color均值都为1,会全程显示对应1值的绿色,不会出现中间段无颜色的问题。
2. 固定色阶映射范围
显式传入colorScale参数,自定义固定在0-1区间的连续色阶,避免函数按照聚合后生成的累加值自动调整色阶范围导致颜色失真。
可直接运行的代码示例:
library(collapsibleTree) library(scales) collapsibleTreeSummary( Mostafa, hierarchy = c("Coupler Type", "Coupler Manufacturer", "Bar Size", "Failure"), root = "Mechanical Couplers", width = 800, attribute = "Color", # 指定聚合规则:取下属节点的Color均值 aggregation = mean, # 固定0-1区间的红-白-绿色阶映射,使用色盲友好的配色值 colorScale = col_numeric( palette = c("#d73027", "#f7f7f7", "#1a9850"), domain = c(0, 1) ), zoomable = FALSE, collapsed = FALSE )
3. 常见偏差排查
- 注意分类值的大小写与空格一致性:你当前测试数据里的Failure取值为
"Bar Fracture"(首字母大写F),如果后续全量数据中存在"Bar fracture"(小写f)的写法,或是生成Color列时用的匹配规则与实际取值不一致,会导致Color标记计算错误,最终着色与预期不符。 - 若后续需要拆分不同
Coupler Model的子分支,只要将"Coupler Model"按顺序插入到hierarchy向量的对应位置即可,聚合和着色逻辑不受影响。 - 根节点会自动按照全树所有样本的Color均值匹配对应梯度颜色,不需要额外配置。
内容的提问来源于stack exchange,提问作者Maral Dorri
相关产品推荐
相关产品推荐

