如何在 Plotly 中记录颜色的变换值,但要在颜色条上保留原始值?

How to log transform values for color in Plotly but to keep original values on colorbar?

我正在尝试记录在 Plotly 图表上定义颜色的转换值,但我想在 Plotly 颜色条图例上保留原始值(不是对数转换后的数字)以提高可读性。

下面是我在 mtcars 数据集上尝试做的例子:

mtcars %>% plot_ly(x = ~hp, 
               y = ~qsec,                                                                        
               size = ~disp,
               color = ~mpg)

你会得到这张图:

假设我想使用以下代码记录变换颜色变量 (mpg):

mtcars %>% plot_ly(x = ~hp, 
               y = ~qsec,                                                                        
               size = ~disp,
               color = ~log(mpg))

我会得到这张图:

我现在对图表很满意,但现在右边的颜色栏有 log() 数字。

我的问题是:如何 log() 转换图表上的颜色变量但保留颜色条上的原始数字并适当调整为新的日志颜色?

所以,一方面,我想在第二张图片的颜色条上保留原始数字,而不是 2.5、3 和 3.5,但另一方面,我想保留颜色位置这些数字在对数刻度上并且没有使用 ggplotly。

类似,这是使用转换后的值作为颜色条刻度的问题,但未转换的值作为标签。

这里有一个选项:

library(dplyr)
library(plotly)

# Define pretty breaks on transformed scale
brks_transformed <- pretty(log10(mtcars$mpg), n = 5)

# Breaks on the untransformed scale
brks_untransformed <- sprintf("%.1f", 10^brks_transformed)

mtcars %>% 
    plot_ly(
        x = ~hp, y = ~qsec, size = ~ disp, fill = ~ "",
        type = "scatter",
        mode = "markers",
        marker = list(
            color = ~ log10(mpg),
            line = list(width = 0),
            colorbar = list(
                tickmode = "array",
                ticktext = brks_untransformed,
                tickvals = brks_transformed)))