R语言waterfalls包fill_by_sign=TRUE时如何自定义正负柱填充色
实现方法
waterfalls包中fill_by_sign = TRUE时默认的正值绿色、负值红色是函数内部硬编码的规则,没有暴露直接修改默认正负色的入参,要实现正值填充白色、负值填充粉色的效果,手动给每个柱体匹配对应颜色传入即可:
- 把
fill_by_sign设为FALSE,关闭默认填色逻辑 - 根据原始数据的数值正负,给每个分类柱匹配
white(正值)或pink(负值) - 给自动计算的总计柱也匹配对应颜色(如果需要总计柱单独配色也可自行指定)
- 添加柱体边框,避免白色柱和白色绘图背景融合导致看不见
完整可运行代码如下:
library(waterfalls) plot_data <- data.frame(category = letters[1:5], value = c(1, -0.2, 0.3, -0.1, -0.15)) # 为原始数据的每个分类匹配填充色 fill_cols <- ifelse(plot_data$value > 0, "white", "pink") # 为总计柱匹配填充色,这里同样遵循正白负粉规则,要改单独色直接修改total_col即可 total_val <- sum(plot_data$value) total_col <- ifelse(total_val > 0, "white", "pink") fill_cols <- c(fill_cols, total_col) waterfall(.data = plot_data, fill_by_sign = FALSE, fill_colours = fill_cols, calc_total = TRUE, total_axis_text = 'total', rect_border = "black") # 给柱体加黑色边框,解决白柱隐形问题
注意事项
- 传入
fill_colours的颜色向量长度必须和最终绘制的柱体总数一致:示例中原始数据有5个分类,加上自动生成的总计柱共6个柱体,因此颜色向量长度为6 - 如果需要让总计柱和增减柱做视觉区分,直接给
total_col赋值其他颜色即可,比如设为"grey"即可让总计柱显示为灰色
内容的提问来源于stack exchange,提问作者anderwyang
相关产品推荐
相关产品推荐

