gpt4 book ai didi

r - 使用 plotly 过滤链接 View 中的图例

转载 作者:行者123 更新时间:2023-12-04 10:31:25 26 4
gpt4 key购买 nike

我正在处理一个链接图(类似于来自 Carson Sievert 的 The SharedData plot pipeline,用于 R。该图显示了我当前悬停在上面的一个项目的图例。但是,现在图例显示了两个元素,一个用于条形图,另一个用于一种用于折线图。

  • 如何删除第一个图例元素(条形图的红色方块)并仅保留折线图的图例(红线)?

  • 这是当前的代码:
    library(ggplot2)
    library(crosstalk)
    library(plotly)

    sd <- SharedData$new(txhousing, ~city)

    base <- plot_ly(sd, color = I("black")) %>%
    group_by(city) %>%
    layout(showlegend = TRUE)

    p1 <- base %>%
    summarise(has = sum(is.na(median))) %>%
    filter(has > 0) %>%
    arrange(has) %>%
    add_bars(x = ~has, y = ~factor(city, levels = city),
    hoverinfo = "none", showlegend = FALSE) %>%
    layout(
    barmode = "overlay",
    xaxis = list(title = "Number of months missing"),
    yaxis = list(title = "")
    )

    p2 <- base %>%
    add_lines(x = ~date, y = ~median, alpha = 0.3, showlegend = FALSE) %>%
    layout(xaxis = list(title = ""))

    gp <- subplot(p1, p2, titleX = TRUE, widths = c(0.3, 0.7)) %>%
    layout(margin = list(l = 120)) %>%
    highlight(color = "red",
    defaultValues = "Victoria",
    selected = attrs_selected(showlegend = TRUE, mode = "lines"
    ))

    gp

    在某处提到最终删除图例元素可能有效,但在这里对我不起作用。
    gp$x$data[[1]]$showlegend <- FALSE

    最佳答案

    如果 Plotly 没有为我们提供隐藏由 highlight 创建的图例的方法,那么让我们使用 Plotly 自己的函数来做到这一点。

    隐藏跟踪一次所需的 Javascript 代码:

    var updated = {showlegend: false};
    var myPlot = document.getElementsByClassName('plotly')[0];
    Plotly.restyle(myPlot, updated, [2]);

    在这种情况下,它总是第三个元素 [2]这需要隐藏其图例,通常最好根据某些条件动态获取索引。

    让我们将此添加到 Plotly 的 on_click事件以确保传奇在 future 也将不可见。
    myPlot.on('plotly_click', function(data){
    Plotly.restyle(myPlot, updated, [2]);
    });

    最后将所有内容添加到输出中,我们很好。
    javascript <- "
    var updated = {showlegend: false};
    var myPlot = document.getElementsByClassName('plotly')[0];
    Plotly.restyle(myPlot, updated, [2]);
    myPlot.on('plotly_click', function(data){
    Plotly.restyle(myPlot, updated, [2]);
    });
    "

    w <- plotly::as_widget(gp)
    w <- htmlwidgets::prependContent(w, onStaticRenderComplete(javascript), data=list(''))
    htmlwidgets::saveWidget(w, "cities.html")
    w

    enter image description here

    关于r - 使用 plotly 过滤链接 View 中的图例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45903136/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com