You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何添加自定义色阶作为图例?R多热图温度一致性需求

统一多幅热图色阶的解决方案

嘿,我来帮你搞定这个多图颜色统一的问题!核心思路就是先锁定所有数据的全局温度极值,基于这个范围定制色阶,让六张热图的颜色映射完全对齐。

步骤1:提取全局温度范围

先把六个数据框里的温度数据全部汇总,找到整体的最小和最大值——这是统一色阶的关键基准:

# 假设你的六个数据框分别是df1到df6,温度数据存在$temp列或矩阵中
all_temps <- c(df1$temp, df2$temp, df3$temp, df4$temp, df5$temp, df6$temp)
temp_min <- min(all_temps, na.rm = TRUE)  # 忽略NA值
temp_max <- max(all_temps, na.rm = TRUE)

步骤2:自定义统一色阶

根据你“低温向高温过渡”的需求,用colorRampPalette生成连续渐变的色阶,比如从冷色调到暖色调:

# 生成50个颜色梯度,数量可以按需调整
cols <- colorRampPalette(c("darkblue", "lightblue", "yellow", "orange", "red"))(50)

步骤3:绘制每张热图时统一参数

绘制每张图时,指定zlim为全局温度范围,同时用上自定义的cols,这样颜色映射就完全一致了。另外,带°C标注的等高线可以用contour()实现:

# 以绘制第一张图为例,其余五张图复用相同参数即可
# x=时间向量,y=深度向量,z=温度矩阵(数据框需先转成矩阵:as.matrix(df1[,c(...)]))
image(x, y, z, zlim = c(temp_min, temp_max), col = cols, 
      xlab = "时间", ylab = "深度", main = "热图1")
# 添加带°C单位的等高线,levels可按需调整间隔
contour(x, y, z, levels = seq(temp_min, temp_max, by = 2),
        add = TRUE, labcex = 0.8, 
        labels = paste(seq(temp_min, temp_max, by = 2), "°C"))

额外小贴士

  • 如果想把六张图放在同一画布对比,可以先运行par(mfrow = c(2,3)),绘制完成后用dev.off()重置绘图参数。
  • 要是温度分布不均匀,也可以用quantile(all_temps, seq(0,1,0.02))来划分颜色区间,让色阶更贴合数据分布。

内容的提问来源于stack exchange,提问作者Arne Brandschwede

火山引擎 最新活动