首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >强制将Plotly相关性热图颜色标度设置为零-R白色

强制将Plotly相关性热图颜色标度设置为零-R白色
EN

Stack Overflow用户
提问于 2018-05-02 08:03:21
回答 3查看 1.9K关注 0票数 5

中生成了一个关联热图。

..。比例范围从-1到1。当相关性变得更强时,瓷砖被涂成更深的红色。随着负相关性变得更强,瓷砖被涂成了深蓝色。我需要零值才能被涂成白色。但是,颜色栏仅根据数据集的分布选择零的颜色。如何强制将零值设置为白色,并使其位于颜色条的中间?我试着用

这个答案

,但无法将其用于此热图。请帮帮我,我快疯了!

代码语言:javascript
运行
复制
library(plotly)
library(magrittr)

# compute a correlation matrix
correlation <- round(cor(mtcars), 3)
nms <- names(mtcars)


colorlength <- 100

null_value <- (0 - min(correlation)) / (max(correlation) - min(correlation))        
border <- as.integer(null_value * colorlength)
colorscale <- as.list(1:colorlength)

#colorscale below zero
s <- scales::seq_gradient_pal("blue", "white", "Lab")(seq(0,1,length.out=border))
for (i in 1:border) {
  colorscale[[i]] <- c((i - 1) / colorlength, s[i])
}

#colorscale above zero
s <- scales::seq_gradient_pal("white", "red", "Lab")(seq(0,1,length.out=colorlength - border))
for (i in 1:(colorlength - border)) {
  colorscale[[i + border]] <- c((i + border) / colorlength, s[i])
}



plot_ly(x = nms, y = nms, z = correlation, 
            key = correlation, type = "heatmap", source = "heatplot",color = ~correlation,
            colorscale = colorscale,
            colorbar = list(len=1)) %>%
      layout(xaxis = list(title = ""), 
             yaxis = list(title = ""))

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-05-02 09:56:11

使用

代码语言:javascript
运行
复制
library(tidyverse);
gg <- correlation %>%
    as.data.frame() %>%
    rownames_to_column("x") %>%
    gather(y, val, -x) %>%
    ggplot(aes(x, y, fill = val)) +
    geom_tile() +
    scale_fill_gradientn(
        colours = c("blue", "white", "red"),
        limits = c(-1, 1))

# Create plotly object
library(plotly);
ggplotly(gg);

说明: In

我们可以使用

要设置

显式地,确保白色对应于

..。

然后将

对象添加到

对象。

票数 2
EN

Stack Overflow用户

发布于 2018-05-02 20:36:31

这很简单,因为

,但我认为你也可以用

..。你可以试试这个:

代码语言:javascript
运行
复制
col3 <- colorRamp(c("red", "white", "blue"))

plot_ly(x = nms, y = nms, z = correlation, 
        key = correlation, type = "heatmap", source = "heatplot",color = col3,
        colorscale = colorscale,
        colorbar = list(len=1, limits = c(-1, 1))) %>%
    layout(xaxis = list(title = ""), 
           yaxis = list(title = ""))

票数 7
EN

Stack Overflow用户

发布于 2021-03-01 20:19:29

使用

,使用

对象,因为您知道heatmap的值的限制,所以只需设置

参数

分别与

参数设置为中间为白色的任何色标,如

..。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50125427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档