我正在处理一个链接的情节(类似于来自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
答案 0 :(得分:2)
如果Plotly没有为我们提供隐藏highlight
创建的图例的方法,那么让我们使用Plotly自己的函数来实现这一点。
隐藏跟踪一次所需的Javascript代码:
var updated = {showlegend: false};
var myPlot = document.getElementsByClassName('plotly')[0];
Plotly.restyle(myPlot, updated, [2]);
在这种情况下,它始终是隐藏其图例的第三个元素[2]
,通常最好根据某些条件动态获取索引。
让我们将此添加到Plotly的on_click
事件中,以确保该图例在将来也是不可见的。
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