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

highcharter热力图存在负值时hc_colorAxis配色不生效问题求助

问题原因

当你直接用hchart()函数传入相关矩阵绘制热力图时,highcharter会自动识别输入为相关系数矩阵,默认启用内置的蓝白红相关系数专属配色方案,该方案的优先级高于你后续通过hc_colorAxis()定义的自定义配色,当矩阵存在负值时默认配色就会覆盖你的配置,导致自定义stops不生效。

解决方案

你只需要在hchart()调用时添加cor = FALSE参数,关闭相关矩阵自动配色逻辑即可,修改后的完整代码如下:

library(BatchGetSymbols)
library(tidyverse)
library(highcharter)

t1 = BatchGetSymbols(c("MSFT", "SPY", "SH"))[[2]]
t2 = t1[,c("ticker", "ref.date", "ret.adjusted.prices")]
t3 = na.omit(pivot_wider(t2, names_from = ticker, values_from = "ret.adjusted.prices"))
t4 = cor(t3[,2:4])

hchart(type = "heatmap", t4, cor = FALSE) %>%
  hc_legend(layout = "vertical", verticalAlign = "middle", align = "right") %>%
  hc_colorAxis(min = -1, max = 1, stops = color_stops(3, c("#d51f3a", "#FFFFFF", "#5daa45"))) 
可选方案

如果上述修改仍有问题,你可以将相关矩阵转为长格式数据框后再绘图,从根源避免highcharter将输入识别为相关矩阵:

# 转换为长格式数据框
t4_long <- as.data.frame(as.table(t4))

hchart(t4_long, "heatmap", hcaes(x = Var1, y = Var2, value = Freq)) %>%
  hc_legend(layout = "vertical", verticalAlign = "middle", align = "right") %>%
  hc_colorAxis(min = -1, max = 1, stops = color_stops(3, c("#d51f3a", "#FFFFFF", "#5daa45")))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 14:06:03