如何在fvisgam绘图中将发散配色的中心色设为对应0值?
调整fvisgam等高线图的颜色中心至0值
要让RdBu配色的白色对应0值,核心是手动指定颜色映射的**中点(midpoint)**和数值范围,覆盖默认的对称映射逻辑(默认中点是数据极值的平均值,即(-1+0.2)/2=-0.4)。以下是具体解决方案:
方法说明
fvisgam返回的是ggplot对象,因此可以通过添加ggplot的颜色刻度层,或直接在fvisgam的col.scale参数中定义自定义颜色映射,强制将0设为颜色中点。
修改后的代码
library(ggplot2) library(colorspace) library(mgcv) library(itsadug) library("viridis") library("RColorBrewer") # 读取数据集 est_vaed10 <- read.csv("10x10_vaed_c_est_vs_coverage-table.csv") # 拟合GAM模型 m1 <- gam(relative_spn_median ~ te(c_est, v.coverage), data=est_vaed10, family="gaussian") # 定义RdBu反转配色(蓝-白-红) color_palette <- rev(brewer.pal(11, "RdBu")) # 生成图形并设置颜色映射,将0作为颜色中点 fvisgam(m1, view=c("c_est", "v.coverage"), col.scale = scale_fill_stepsn( colors = color_palette, limits = c(-1, 0.2), # 你的拟合值范围 midpoint = 0, # 指定白色对应的数值 breaks = seq(-1, 0.2, length.out = 11) # 匹配11个颜色的断点 ), main="fvisgam plot (White = 0)", n.seg=2)
关键参数解释
limits = c(-1, 0.2):锁定颜色映射的数值范围,确保覆盖你的拟合值区间。midpoint = 0:将配色的中心(白色)指定为0值。breaks:生成与11个颜色对应的数值断点,保证颜色均匀分布在-1到0.2之间。
内容的提问来源于stack exchange,提问作者Kate
相关产品推荐
相关产品推荐

