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

使用dplyr过滤数据生成多图时如何统一填充刻度范围?

统一热力图Fill刻度范围的解决方法

问题根源是每个热力图仅使用对应lag的子集数据,ggplot会自动根据子集的ccf值范围生成颜色刻度,导致各图刻度无法统一。解决核心是基于全局数据集的ccf极值设置统一的颜色范围,具体操作如下:

  1. 先计算整个dat数据中ccf的全局最大、最小值:
ccf_min <- min(dat$ccf)
ccf_max <- max(dat$ccf)
  1. 在绘制每个ggplot时,通过scale_fill_continuous()指定统一的limits参数,强制所有图使用相同的颜色刻度范围。

修改后的完整代码:

library(purrr)
library(tidyverse)

set.seed(123) # 设置随机种子保证结果可复现
test <- data.frame(`1` = rpois(10,3),`2`=rpois(10,3), `3` = rpois(10,3))

ccf.func <- function(i,j){
  dat <- ccf(test[i],test[j],plot=FALSE,type="correlation")
  ccf.dat <- data.frame(ccf=dat$acf,lag=dat$lag,first=i,second=j)
  return(ccf.dat)
}

dat <- map_dfr(1:3, function(i) map_dfr(1:3, function(j) ccf.func(i,j)))

# 计算全局ccf的极值
ccf_min <- min(dat$ccf)
ccf_max <- max(dat$ccf)

# 生成统一刻度的热力图列表
plot_list <- lapply(0:2, function(i)
  ggplot(dat |> filter(lag == i)) +
    geom_tile(aes(x=first,y=second,fill=ccf)) +
    # 指定统一的颜色范围
    scale_fill_continuous(limits = c(ccf_min, ccf_max), 
                         # 可选:添加颜色渐变提升可读性,比如蓝到红
                         low = "blue", high = "red") +
    labs(title = paste("Lag =", i))
)

# 可选:用gridExtra包拼接查看所有图
# library(gridExtra)
# grid.arrange(grobs = plot_list, ncol=3)

关键说明

  • scale_fill_continuous(limits = c(ccf_min, ccf_max))是核心:强制所有热力图的颜色映射范围和全局ccf极值保持一致,不同lag的图之间可直接对比ccf大小。
  • 也可以用scale_fill_gradient2设置中间色(比如0值对应白色),更适配相关系数的可视化场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 21:05:26