我想用plotly绘制一个R中的矩阵,其中的色标是基于分位数值的。下面是一个自包含的可重复的例子:
library(dplyr)
library(plotly)
# Data to plot
d <- data.frame(x = 1:10, y=1:10, z = rnorm(n = 10, mean = 0, sd = 100))
# Quantile values
qtl_val <- c(0, 0.68, 0.95, 0.99, 0.997)
# Colors to use
qtl_colors <- c(
rgb(0,0,0),
rgb(246/256,192/256,192/256),
rgb(244/256,135/256,134/256),
rgb(219/256,55/256,55/256),
rgb(164/256,30/256,34/256))
# Function to assign a color to each quantile window
set_color <- function(z,qtl_leg){
for( i in 1:nrow(qtl_leg)){
min_val <- qtl_leg$val[i]
max_val <- ifelse( !is.na(qtl_leg$lead_val[i]), qtl_leg$lead_val[i], Inf)
if( z >= min_val & z <= max_val ) return(qtl_leg$color[i])
}
}
qtl_leg <- data.frame(val=round(as.numeric(quantile(d$z, probs=qtl_val)))) %>%
mutate(lead_val = lead(val)) %>%
mutate(color = qtl_colors)
d <- d %>%
rowwise() %>%
mutate(color = set_color(z,qtl_leg) ) %>%
as.data.frame()
# Draw the matrix
plot_ly(data=d, x=~x, y=~y, z=~z, color=~color, type='heatmap' )
绘图与数据框架中设置的颜色不匹配,图例和提示工具文本都很奇怪。总而言之,我出错了,但我不知道是什么。
1条答案
按热度按时间vql8enpb1#
您可以使用
zauto = FALSE
创建自定义比例,并按如下方式指定zmin
和zmax
:输出: