Plotly表面图:用text参数控制hovertemplate及自定义悬浮信息
Plotly Surface图自定义悬浮信息问题解决
问题描述
需要用Plotly的surface绘制表面图(必须采用surface而非3D网格,需传入矩阵而非数据框),希望自定义悬浮信息,仅展示X*Y和X+Y的计算结果,不显示默认的x、y、z坐标。但当前使用hovertext参数时仍会显示默认坐标,且<extra></extra>标签无法生效。尝试的代码如下:
library(plotly) mat <- 0:10 %*% t(0:10) plot_ly() |> add_surface(z = ~mat, hovertext = paste( "X*Y:", mat, "<br>X+Y: ", rep(0:10, each = 11) + rep(0:10, 11), "<extra></extra>") |> matrix(ncol = 11), hovertemplate = text)
解决方案
1. 移除默认的x、y、z坐标
要彻底隐藏默认坐标,需在hovertemplate中不包含任何%{x}、%{y}、%{z}变量,直接引用自定义的hovertext内容,以此覆盖Plotly的默认悬浮模板。
2. 正确使用<extra></extra>标签
<extra></extra>的作用是隐藏Plotly默认添加的额外信息(比如trace名称),它需要放在hovertemplate的末尾,而非hovertext内部。正确的用法是:将自定义悬浮内容存入hovertext,然后在hovertemplate中用%{hovertext}调用该内容,最后追加<extra></extra>来隐藏默认额外信息。
修正后的完整代码:
library(plotly) # 生成z矩阵(X*Y的结果) mat <- 0:10 %*% t(0:10) # 生成X+Y的矩阵,用outer函数更简洁 x_plus_y <- outer(0:10, 0:10, `+`) # 构造自定义悬浮文本矩阵 hover_text <- matrix( paste("X*Y:", mat, "<br>X+Y:", x_plus_y), nrow = nrow(mat), ncol = ncol(mat) ) plot_ly() |> add_surface( z = ~mat, hovertext = ~hover_text, # 调用hovertext并隐藏默认额外信息 hovertemplate = "%{hovertext}<extra></extra>" )
内容的提问来源于stack exchange,提问作者cach1
相关产品推荐
相关产品推荐

