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

R ggplot2热图着色忽略Annual值 仅基于1-12月数据生成颜色梯度

R ggplot热图颜色梯度修改方案

你只需要对原有代码做几处调整,就能实现「月度值计算颜色梯度、年度列单独着色」的需求,核心逻辑是把月度数据和年度数据拆分到两个图层渲染,颜色梯度的计算范围仅包含1-12月的收益率数值。

修改后的完整代码

library(RColorBrewer)
library(ggplot2)
library(ggthemes)

myPalette <- colorRampPalette(brewer.pal(3, "Spectral"), space="Lab")
yaxis <- factor(df22$Year, levels = rev(unique(df22$Year)))
# 用基础R计算仅Jan-Dec月度收益率的最值,无需额外依赖包
month_return_range <- range(df22$`Monthly Returns`[df22$Month != "Annual"])

ggplot(df22, aes(x=Month, y=yaxis)) + 
  # 第一层:渲染1-12月热图块,用月度收益率映射填充色
  geom_tile(data = df22[df22$Month != "Annual", ], aes(fill = `Monthly Returns`)) + 
  # 第二层:单独渲染Annual列热图块,可自行修改fill参数的颜色值
  geom_tile(data = df22[df22$Month == "Annual", ], fill = "#fff2cc") +
  xlab("") + ylab("") + 
  guides(fill = FALSE) +
  scale_x_discrete(position = 'top') +
  # 锁定颜色梯度范围为月度收益率区间,不受Annual值影响
  scale_fill_gradientn(colours = myPalette(100), limits = month_return_range) +
  theme_fivethirtyeight() +
  theme(
    panel.grid.major = element_blank(),
    panel.grid.minor = element_blank()
  ) +
  geom_text(label= scales::percent(df22$`Monthly Returns`,accuracy=0.1), 
            size = 3.5)

关键修改说明

  • 提前筛选所有非Annual的月度收益率计算取值范围,传入scale_fill_gradientn的limits参数,强制颜色梯度仅在这个范围内计算
  • 热图块geom_tile拆分为两个图层:1-12月图层沿用原有填充映射,Annual列图层单独指定固定填充色,示例用的浅金色#fff2cc可根据需求更换
  • 文本标签无需拆分,所有月份(含Annual)的收益率数值都会正常展示

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 08:36:00