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
相关产品推荐
相关产品推荐

