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

ggplot2中stat_density_2d(raster)如何分区域填充不同渐变颜色?

这问题挺有意思的——要给2D密度图按x轴区间分不同的填充渐变,默认ggplot的单一fill比例尺确实搞不定,不过用ggnewscale包就能轻松解决!我给你拆解下步骤和代码:

解决思路

核心问题是ggplot默认只能绑定一个fill比例尺,所以我们需要用多比例尺切换的方式,分别绘制两个x区间的密度栅格,各自绑定对应的渐变填充。这里用到ggnewscale包来实现多fill比例尺的独立配置。

具体实现步骤
  1. 安装并加载必要的包:如果还没装ggnewscale,先完成安装:
install.packages("ggnewscale")
library(ggnewscale)
library(ggplot2)
  1. 修改代码,分区域绘制密度栅格:
    • 先处理x ∈ [-100, 0]的区域,设置白到红的渐变;
    • 用new_scale_fill()切换到新的填充比例尺;
    • 再处理x ∈ [0, 100]的区域,设置你想要的其他渐变(比如保留你原来的白到蓝);
    • 最后叠加散点和调整坐标轴范围。

完整代码如下:

library(ggplot2)
library(ggnewscale)

# 假设你的data已经包含xVal和yVal列
d <- ggplot(data, aes(xVal, yVal)) +
  # 左半区:x从-100到0,白到红渐变
  stat_density_2d(geom = "raster", 
                  aes(fill = ..density..), 
                  contour = FALSE,
                  # 仅筛选x<=0的数据计算密度
                  data = ~ subset(., xVal <= 0)) +
  scale_fill_gradient2(low = "white", high = "red", 
                       space = "Lab", 
                       limits = c(0.00000, 0.00008),
                       guide = "colourbar",
                       name = "Left Density") +
  # 切换到新的填充比例尺
  new_scale_fill() +
  # 右半区:x从0到100,保留你原来的白到蓝渐变
  stat_density_2d(geom = "raster", 
                  aes(fill = ..density..), 
                  contour = FALSE,
                  # 仅筛选x>=0的数据计算密度
                  data = ~ subset(., xVal >= 0)) +
  scale_fill_gradient2(low = "white", high = "#1A6AFF", 
                       space = "Lab", 
                       limits = c(0.00000, 0.00008),
                       guide = "colourbar",
                       name = "Right Density") +
  # 叠加散点并设置x轴范围
  geom_point() +
  xlim(-100, 100)

d
关键细节说明
  • 每个stat_density_2d都通过data = ~ subset(., xVal <= 0)限定了计算密度的区域,确保各自只处理对应x区间的数据,不会互相干扰;
  • new_scale_fill()是核心,它告诉ggplot接下来要使用全新的fill比例尺,不会和之前的配置冲突;
  • 你可以根据需求自由调整两个渐变的颜色、数值范围(limits)等参数,比如右半区想换成绿到黄的渐变,直接修改high参数即可;
  • 如果觉得两个色条太占空间,可以通过guide = guide_colourbar()的子参数(比如width、height)调整尺寸,或者根据需求合并成一个(不过分区域展示的话,分开色条会更清晰)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:27:07