如何移除ggplotly/toWebGL生成的Plotly图表中的悬停效果?
解决Shiny中WebGL模式下Plotly图表无法移除悬停效果的问题
你的问题出在:当ggplot包含分组映射(比如color=Species)时,toWebGL(或ggplotly)会为每个分组生成独立的trace对象,而非单个trace。你之前只修改了第一个trace的hoverinfo,其他分组的悬停效果自然还会保留。
修正方案1:遍历所有trace修改hoverinfo
直接遍历p$x$data中的所有元素,统一设置hoverinfo="none":
library(shiny) library(ggplot2) library(plotly) ui <- fluidPage( plotlyOutput("po") ) server <- function(input, output, session) { output$po <- renderPlotly({ p <- ggplot(iris)+geom_point(aes(x=Sepal.Width,y=Sepal.Length,color=Species)) p <- toWebGL(p) # 遍历所有trace设置hoverinfo为none for(i in seq_along(p$x$data)){ p$x$data[[i]]$hoverinfo <- "none" } p }) } shinyApp(ui, server)
修正方案2:使用plotly的style函数(更简洁)
style函数可以批量修改所有trace的属性,无需手动遍历:
library(shiny) library(ggplot2) library(plotly) ui <- fluidPage( plotlyOutput("po") ) server <- function(input, output, session) { output$po <- renderPlotly({ p <- ggplot(iris)+geom_point(aes(x=Sepal.Width,y=Sepal.Length,color=Species)) p <- toWebGL(p) # 批量设置所有trace的hoverinfo为none p <- style(p, hoverinfo = "none") p }) } shinyApp(ui, server)
两种方法都能彻底移除WebGL模式下所有数据点的悬停提示,推荐用第二种,代码更简洁且不易出错。
内容的提问来源于stack exchange,提问作者Noskario
相关产品推荐
相关产品推荐

