You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何移除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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 13:52:08