Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
强制绘图相关热图色标在零-R时为白色_R_Colors_Plotly_Heatmap_Correlation - Fatal编程技术网

强制绘图相关热图色标在零-R时为白色

强制绘图相关热图色标在零-R时为白色,r,colors,plotly,heatmap,correlation,R,Colors,Plotly,Heatmap,Correlation,我在中绘出了相关热图。比例从-1变为1。随着相关性的增强,瓷砖的颜色变深。当相关性变得负向更强时,瓷砖的颜色变为深蓝色。我需要零值被涂成白色。但是,颜色栏仅根据数据集的分布选择零的颜色。我怎么能迫使零值为白色,在颜色条的中间?我试过使用,但无法使其适用于此热图。请帮帮我,我快疯了 library(plotly) library(magrittr) # compute a correlation matrix correlation <- round(cor(mtcars), 3) nms

我在
中绘出了相关热图。比例从-1变为1。随着相关性的增强,瓷砖的颜色变深。当相关性变得负向更强时,瓷砖的颜色变为深蓝色。我需要零值被涂成白色。但是,颜色栏仅根据数据集的分布选择零的颜色。我怎么能迫使零值为白色,在颜色条的中间?我试过使用,但无法使其适用于此热图。请帮帮我,我快疯了

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 = ""))
library(plotly)
图书馆(magrittr)
#计算相关矩阵

相关性使用
ggplot
ggplotly
如何:

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);
library(tidyverse);
gg%
as.data.frame()%>%
行名称到列(“x”)%>%
聚集(y,val,-x)%>%
ggplot(aes(x,y,fill=val))+
geom_瓷砖()+
比例填充梯度n(
颜色=c(“蓝色”、“白色”、“红色”),
极限=c(-1,1))
#创建绘图对象
图书馆(策划);
ggplotly(gg);


说明:在
ggplot
中,我们可以使用
scale\u fill\u gradientn
明确设置
限制,确保白色对应于
0
的值
ggplotly
然后将
ggplot
对象转换为
plotly
对象。

使用
ggplotly
非常简单,但我认为您也可以使用
plotly
进行转换。你可以试试这个:

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 = ""))
col3%
布局(xaxis=list(title=”“),
yaxis=列表(title=“”))

使用
绘图
,使用
图形对象.Heatmap
对象,因为您知道热图值的限制,所以可以将
zmax
zmid
zmin
参数设置为
1,0,分别为1 < /代码>和色标< /代码>参数为任意色阶,中间为白色,如<代码> RdBu < /代码> .<