确定映射颜色时plotly使用的颜色

问题描述 投票:0回答:1

我可以使用

colors
参数为我的
plotly
图表提供调色板,如下所示:

library(plotly)
library(viridis)

col_pal <- viridis(10)

plot_ly(mtcars) %>%
  add_trace(x = ~ mpg, y = ~ cyl, color = ~ factor(cyl), colors = col_pal,
            type = "scatter", mode = "markers", marker = list(size = 25))

这将产生以下图:

使用以下

JavaScript
我可以确定有效使用哪些颜色:

const cols = $('path.point').map(function() {
  const style = $(this).attr('style');
  const fill_col = style.match(/fill: [^;]+/g)[0].replace('fill: ', '');
  const hex = '#' + fill_col
    .slice(4, -1)
    .split(',')
    .map(x => (+x).toString(16).padStart(2, 0))
    .join('');
  return hex;
})

new Set(cols)
// Set(3) {'#440154', '#25908c', '#fde725'}

如果我将其与

col_pal
进行比较:

col_pal
# [1] "#440154FF" "#482878FF" "#3E4A89FF" "#31688EFF" "#26828EFF" "#1F9E89FF"
# [7] "#35B779FF" "#6DCD59FF" "#B4DE2CFF" "#FDE725FF"

我看到

plotly
使用第一个和最后一个元素 (
#440154FF
/
#FDE725FF
),并且第三种颜色似乎是某种插值,因为它不是
col_pal
的直接成员:

scales::show_col(c(col_pal[1:5], "#25908CFF", col_pal[6:10]))

我猜颜色是

col_pal[5:6]

的插值

但我不知道颜色是如何计算的?任何想法如何复制颜色

plotly
在 R 中使用知道:

  1. 原始调色板
  2. plotly中使用的颜色数量(这里
    nlevels(as.factor(mtcars$cyl))

P.S.:如果我的调色板包含一个中间点,则颜色完全匹配(更改

col_pal <- viridis(11)
,使用的颜色是
col_pal[c(1, 6, 11)]
。但是,我对 oclor 调色板长度和所需颜色的任何组合非常感兴趣。

r plotly
1个回答
0
投票

经过一些调试后,我确定了完成颜色映射的行(实际上已经在 R 侧):

colScale <- scales::col_factor(pal, levels = names(pal) %||% lvls, na.color = na.color)
因此要准确获取 

plotly

 使用的颜色,我们需要运行:

lvls <- levels(as.factor(mtcars$cyl)) scales::col_factor(col_pal, levels = lvls)(lvls) # [1] "#440154" "#25908C" "#FDE725"
    
© www.soinside.com 2019 - 2024. All rights reserved.