You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何制作高区分度热图:解决极值干扰下的数值辨识度问题

解决lattice热图颜色区分度问题的几种方法

针对底部行数值偏低导致其他区域颜色难以区分的问题,可以通过以下几种方式调整:

1. 基于分位数设置颜色断点

利用分位数将数值区间划分为更均衡的分段,让高数值区域的颜色差异更明显:

library("lattice")
n <- (1:10)*10
Dynamic_n <- (1:10)*10
data <- expand.grid(X=n, Y=Dynamic_n)
results <- c(0.74, 0.648, 0.544, 0.457, 0.406, 0.344, 0.327, 0.278, 
                       0.277, 0.232, 0.87, 0.913, 0.919, 0.898, 0.873, 0.839, 0.8, 0.754, 
                       0.703, 0.64, 0.889, 0.927, 0.952, 0.949, 0.93, 0.935, 0.918, 
                       0.9, 0.909, 0.875, 0.871, 0.925, 0.951, 0.958, 0.954, 0.959, 
                       0.958, 0.949, 0.933, 0.94, 0.876, 0.952, 0.944, 0.955, 0.973, 
                       0.965, 0.963, 0.964, 0.968, 0.971, 0.871, 0.932, 0.956, 0.961, 
                       0.955, 0.97, 0.964, 0.973, 0.971, 0.969, 0.887, 0.938, 0.958, 
                       0.974, 0.968, 0.959, 0.967, 0.974, 0.97, 0.966, 0.881, 0.944, 
                       0.961, 0.954, 0.966, 0.961, 0.958, 0.965, 0.979, 0.971, 0.878, 
                       0.927, 0.954, 0.966, 0.967, 0.953, 0.959, 0.973, 0.976, 0.969, 
                       0.868, 0.932, 0.952, 0.965, 0.964, 0.97, 0.964, 0.976, 0.966, 
                       0.974)
data$results <- results

# 计算分位数断点
breaks <- quantile(data$results, seq(0, 1, length.out = 15))
# 使用分位数断点绘制热图
levelplot(results ~ X*Y, data = data, xlab="X",
          main="", at = breaks, col.regions = colorRampPalette(c("#0000FF", "#FFFFFF", "#FF0000"))(14))

2. 截断极端低值并调整颜色映射范围

如果底部行的低值属于异常或次要数据,可以截断数值范围,聚焦高数值区域的区分度,同时保留低值的标识:

# 截断数值,将低于0.6的数值设为0.6(仅用于颜色映射)
data$results_adj <- pmax(data$results, 0.6)
# 绘制调整后的热图,同时可以添加注释说明截断情况
levelplot(results_adj ~ X*Y, data = data, xlab="X",
          main="热图(数值低于0.6统一按0.6映射)", 
          col.regions = colorRampPalette(c("blue", "white", "red"))(20))

3. 使用感知均匀的颜色方案

选择对人眼更友好的颜色渐变(如viridis系列),即使数值范围差异大,也能更好区分相近数值:

# 需要先安装viridis包
# install.packages("viridis")
library(viridis)

levelplot(results ~ X*Y, data = data, xlab="X",
          main="", col.regions = viridis(20), 
          at = seq(min(data$results), max(data$results), length.out = 21))

4. 自定义颜色区间

手动划分颜色区间,给高数值区域分配更多的颜色分段:

# 手动设置断点,低值区间宽,高值区间密
custom_breaks <- c(0.2, 0.6, 0.8, 0.85, 0.9, 0.92, 0.94, 0.96, 0.98)
levelplot(results ~ X*Y, data = data, xlab="X",
          main="", at = custom_breaks, 
          col.regions = colorRampPalette(c("darkblue", "lightblue", "yellow", "orange", "red"))(length(custom_breaks)-1))

内容的提问来源于stack exchange,提问作者J.Z.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 07:45:01