show/hide 所有绘图字符的 Plotly 图例条目

Plotly legend entry to show/hide all plotting characters

假设我正在构建一个显示三个不同组(此处由颜色指定)的 plotly 散点图。我可以通过单击图例中的组来单独 show/hide 每个组。

library(ggplot2)
library(plotly)
d <- data.frame("a" = sample(1:50, 20, T), "b" = sample(1:50, 20, T), 
                        "col" = factor(sample(1:3, 20, T)))
        gg <- ggplot() + geom_point(aes(x = a, y = b, color = col), data = d)
        gg

plotly_build(gg)

有没有办法在图例中添加一个按钮到show/hide所有点?

我不知道有什么方法可以同时切换所有点,但是(正如评论中指出的那样,这将是一个合适的选择)可以从所有点隐藏开始,然后让点一次可见时间

plot_ly(data=d, x=a, y=b, type='scatter', mode='markers', color=col, visible='legendonly') 

这可能更接近于最初要求的内容,但这只是一个"button"而不是图例条目,因此放置很困难。

library(ggplot2)
library(plotly)
d <- data.frame("a" = sample(1:50, 20, T), "b" = sample(1:50, 20, T), 
                "col" = factor(sample(1:3, 20, T)))
gg <- ggplot() + geom_point(aes(x = a, y = b, color = col), data = d)
gg

plotly_build(gg) %>%
layout(updatemenus = list(
    list(
        type = "buttons",
        direction = "right",
        xanchor = "center",
        yanchor = "top",
        showactive = FALSE,
        x = 1.05,
        y = 0.2,
        buttons = list(
            list(method = "restyle",
                 args = list("visible", "all"),
                 label = "show all"),
            list(method = "restyle",
                 args = list("visible", "legendonly"),
                 label = "hide all")
        )
    )
))

这会产生(取决于 plotly 的版本)以下下拉列表 "buttons":

我不知道如何根据当前可见性动态更新按钮,或者如何使两个按钮永久可见而不是仅通过下拉菜单可用。