如何在ggplot2中限制viridis颜色映射范围至10-50区间
实现ggplot2自定义分段颜色映射
要实现你需要的颜色规则,核心是用scale_color_gradientn(或scale_fill_gradientn,根据你的几何对象类型选择)配合scales::squish处理超出范围的值,结合viridis的inferno配色。以下是具体步骤和代码:
1. 加载依赖包
library(ggplot2) library(viridis)
2. 示例数据(可替换为你的真实数据)
set.seed(123) df <- data.frame( x = rnorm(100), y = rnorm(100), logp = sample(c(5:60), 100, replace = TRUE) )
3. 绘图代码
ggplot(df, aes(x, y, color = logp)) + geom_point(size = 3) + scale_color_gradientn( # 定义颜色序列:黑色 → inferno渐变 → inferno最浅黄 colors = c("black", inferno(100), tail(inferno(100), 1)), # 设置颜色映射的核心区间 limits = c(10, 50), # 超出区间的值被"压缩"到区间边界,对应指定颜色 oob = scales::squish, # 自定义图例,优化展示 guide = guide_colorbar( title = "logp", ticks = c(10, 30, 50), labels = c("10", "30", "50+") ) ) + theme_minimal()
参数说明
colors:明确颜色顺序,先给低于10的黑色,中间是inferno的完整渐变(100个颜色足够平滑),最后重复inferno的最浅黄作为高于50的颜色。limits = c(10,50):将颜色映射的有效范围锁定在10到50之间。oob = scales::squish:这个函数会把所有小于10的值映射到10对应的颜色(黑色),大于50的值映射到50对应的颜色(inferno最浅黄),完美匹配你的需求。guide:优化图例显示,把50以上的标注为"50+",避免误解。
内容的提问来源于stack exchange,提问作者user438383
相关产品推荐
相关产品推荐

