【问题标题】:如何在 Plotly 中记录颜色的变换值但在颜色条上保留原始值?
【发布时间】:2022-01-21 17:13:32
【问题描述】:

我正在尝试在 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。

【问题讨论】:

  • 你能多说一点为什么 ggplotly 不是一个选项吗?那样很容易(我发布了一个答案然后删除了它,因为我看到你不想要 ggplotly ...)
  • ggplotly 的问题在于,hoover 信息/文本在点(或使用 ggplotly 制作的地图上的区域)之间滑动时响应性和平滑度不高,因此最好直接在 plotly 中进行。
  • 事实上,我们正在 Plotly 中寻找适用于 Phyton 的解决方案,请参见此处:plotly.com/python/colorscales/… 如果有人知道如何在 R 中执行此操作?
  • 祝你好运……对我来说似乎太难弄明白了。我会从?plotly::layout 开始,但老实说它似乎不太有用:实际上,thisthis 似乎更有用。

标签: r plotly logarithm


【解决方案1】:

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

这是一个选项:

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)))

【讨论】:

  • 谢谢:这部分能不能多解释一下:brks_untransformed &lt;- sprintf("%.1f", 10^brks_transformed)如果要sqrt()或者普通的log()转换要放什么?是否可以使用 sprntif() 在大数之间添加小数点,例如。 1,000,000 并添加字符,例如。 $ 最后?
  • @kosk 第一步是定义变换和逆变换。我已经向您展示了如何使用对数转换的比例进行操作;如果您想要不同的转换,请遵循相同的方法。对于sqrt,您将拥有例如brks_transformed &lt;- pretty(sqrt(mtcars$mpg), n = 5)brks_untransformed &lt;- sprintf("%.1f", brks_transformed^2) 以及 marker 参数中的 color = ~ sqrt(mpg)plot_ly。我假设您熟悉sprintf(更多详细信息请参阅?sprintf);你可以用任何你喜欢的方式使用sprintf:更多的小数点、美元符号作为后缀等等。
  • 附言。您似乎有 Python 背景和 sadly sprintf is absent in Python(但有类似的 % 运算符)。但如果你熟悉 C/C++,R 的 sprintf 提供了类似的功能。
猜你喜欢
  • 2021-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-15
  • 2020-11-24
相关资源
最近更新 更多