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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 16:09:51