指定 colorRamp 端点
specify colorRamp endpoints
我可以为 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
我基本上是在尝试创建一个交互式版本:
library(corrplot)
corrplot(cm,method='shade')
这是我创建的(有点古怪的)交互式相关图。
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 在评论中提到的,解决方案是 set zmin
and zmax
,如:
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'))
这会产生所需的结果。 (图例栏较短,可能是由于较新版本的 plotly 中默认大小发生了变化。)
我可以为 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
我基本上是在尝试创建一个交互式版本:
library(corrplot)
corrplot(cm,method='shade')
这是我创建的(有点古怪的)交互式相关图。
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 在评论中提到的,解决方案是 set zmin
and zmax
,如:
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'))
这会产生所需的结果。 (图例栏较短,可能是由于较新版本的 plotly 中默认大小发生了变化。)