R语言绘制棒棒糖图:按RMSE列升序值分配指定梯度颜色
问题根源
原有代码无法实现按RMSE值匹配颜色的原因:
- 颜色美学映射绑定的是分类变量
Methods,而非数值变量RMSE,颜色分配完全跟随Methods的因子水平顺序,和RMSE数值大小无关联 - 使用分类变量专用的
scale_color_manual配色函数,无法实现数值到色阶的连续映射
修正代码
library(ggplot2) library(dplyr) df1 <- read.table(text = "nbb_RMSE 9 0.2402482 mbb_RMSE 9 0.1023012 cbb_RMSE 8 0.2031448 tmbb_RMSE 4 0.2654746 tcbb_RMSE 9 0.4048711") colnames(df1) <- c("Methods", "lb", "RMSE") df1 |> mutate(lb = as.factor(lb)) |> ggplot(aes(x = Methods, y = RMSE, colour = RMSE)) + # 优先绘制棒棒糖线段,避免线段覆盖散点 geom_segment(aes(x = Methods, xend = Methods, yend = RMSE, y = 0), linewidth = 1) + geom_point(size = 4) + # 按RMSE数值从低到高匹配指定色阶 scale_color_gradientn( colours = c("green", "yellowgreen", "yellow", "orange", "red"), values = scales::rescale(c(min(df1$RMSE), quantile(df1$RMSE, 0.25), median(df1$RMSE), quantile(df1$RMSE, 0.75), max(df1$RMSE))) ) + theme_bw()
实现效果
代码运行后完全匹配需求规则:
- RMSE最小值(mbb_RMSE,0.102)对应绿色
- RMSE最大值(tcbb_RMSE,0.405)对应红色
- 其余样本按RMSE升序依次匹配黄绿、黄、橙色系,棒棒糖线段和对应散点颜色保持一致
内容的提问来源于stack exchange,提问作者Daniel James
相关产品推荐
相关产品推荐

