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

如何为ggplot热图指定区域手动添加条纹并解决相关报错与颜色问题

解决ggpattern热图的图案报错与颜色渐变问题

问题分析

  • 报错Error: Continuous value supplied to discrete scale:重复调用geom_tile()导致图层冲突,干扰了离散型pattern变量的刻度映射。
  • 注释掉scale_pattern_manual后仅显示红色调:默认scale_fill_gradient2的中点为0,而你的Z值范围是1-4,所有数据都在中点以上,颜色自然偏红;同时geom_tile()覆盖了geom_tile_pattern的颜色设置。

修正方案

移除冗余图层,调整颜色渐变中点,正确配置图案映射:

library(ggpattern)
library(ggplot2)
library(tidyverse)

df <- data.frame(X = c(1, 1, 2, 2, 3, 3),
                 Y = c(1, 2, 1, 2, 1, 2),
                 Z = c(1, 2, 1, 3, 2, 4),
                 hatches = c("zero", "one", "zero", "one", "zero", "zero"))

ggplot(df, aes(X, Y, fill = Z, pattern = hatches)) +
  # 仅保留geom_tile_pattern作为tile图层
  geom_tile_pattern(
    pattern_color = "black",    # 条纹颜色
    pattern_fill = NA,          # 让底层填充色透出
    pattern_angle = 45,         # 斜线角度
    pattern_density = 0.5,      # 条纹密度
    pattern_spacing = 0.025,    # 条纹间距
    pattern_key_scale_factor = 1
  ) +
  # 手动指定图案:one显示条纹,zero无图案
  scale_pattern_manual(values = c(zero = "none", one = "stripe")) +
  # 设置蓝-灰-红渐变,中点匹配Z值范围的中间值
  scale_fill_gradient2(
    low = "blue",
    mid = "gray",
    high = "red",
    midpoint = 2.5
  )

关键调整说明

  • 移除geom_tile():避免覆盖geom_tile_pattern的渲染结果,确保图案和填充色正常显示。
  • 设置midpoint = 2.5:让颜色渐变中点对应Z值的中间范围(1-4),使蓝色(低Z值)、灰色(中间Z值)、红色(高Z值)的渐变正确匹配数据。
  • 调整图案参数:pattern_fill = NA保证填充色能透过条纹显示,pattern_color设置黑色条纹,确保图案清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 08:31:12