指定colorRamp端点

指定colorRamp端点,r,colors,gradient,plotly,r-corrplot,R,Colors,Gradient,Plotly,R Corrplot,我是否可以指定colorRamp的端点,以便无论其他数据的范围如何,值始终映射到单个颜色 我试图在plotly中创建一个交互式关联图。下面是一些示例数据 set.seed(1) m <- 4 cm <- matrix(runif(m**2,-1,1), nrow=m, ncol=m, dimnames=list(letters[1:m],letters[1:m])) diag(cm) <- 1 cm #

我是否可以指定colorRamp的端点,以便无论其他数据的范围如何,值始终映射到单个颜色

我试图在plotly中创建一个交互式关联图。下面是一些示例数据

set.seed(1)
m <- 4
cm <- matrix(runif(m**2,-1,1),
             nrow=m, ncol=m,
             dimnames=list(letters[1:m],letters[1:m]))
diag(cm) <- 1

cm
#            a          b          c          d
# a  1.0000000 -0.5966361  0.2582281  0.3740457
# b -0.2557522  1.0000000 -0.8764275 -0.2317926
# c  0.1457067  0.8893505  1.0000000  0.5396828
# d  0.8164156  0.3215956 -0.6468865  1.0000000
这是我创建的那种粗糙的交互关联图

div_colors <- c('dark red','white','navy blue')
grid_labels <- matrix(paste0('Cor(',
                               do.call(paste,c(expand.grid(rownames(cm),colnames(cm)), sep=', ') ),
                               '): ', 
                               t(round(cm,2))
                             ),
                             ncol=m,byrow=TRUE)
library(plotly)
plot_ly(x = colnames(cm),
        y = rownames(cm),
        z = cm,
        colors = colorRamp(div_colors),
        type='heatmap',
        hoverinfo='text',
        text = grid_labels
        ) %>% layout(yaxis=list(autorange='reversed'))

我的问题是,在不强制colorRamp端点为c-1,1的情况下,白色与0的相关性不匹配,暗红色映射到观察到的最小值,而不是-1。

正如@rawr在评论中提到的,解决方案是:

这会产生期望的结果。图例栏较短,可能是因为较新版本的plotly中的默认大小发生了更改。

set?@rawr这很有效。如果你想写下来,我会接受你的回答。有点琐碎,但在任何例子中都没有。
div_colors <- c('dark red','white','navy blue')
grid_labels <- matrix(paste0('Cor(',
                               do.call(paste,c(expand.grid(rownames(cm),colnames(cm)), sep=', ') ),
                               '): ', 
                               t(round(cm,2))
                             ),
                             ncol=m,byrow=TRUE)
library(plotly)
plot_ly(x = colnames(cm),
        y = rownames(cm),
        z = cm,
        colors = colorRamp(div_colors),
        type='heatmap',
        hoverinfo='text',
        text = grid_labels
        ) %>% layout(yaxis=list(autorange='reversed'))
plot_ly(x = colnames(cm),
        y = rownames(cm),
        z = cm,
        zmin=-1,                         #   <============
        zmax=1,                          #   <============
        colors = colorRamp(div_colors),
        type='heatmap',
        hoverinfo='text',
        text = grid_labels
) %>% layout(yaxis=list(autorange='reversed'))