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

ggplotly统一X悬停模式下保留text美学并显示X值的实现

解决ggplotly中hovermode="x unified"时的悬停文本自定义问题

方案一:保留text美学,实现顶部单次显示X值

核心思路:在ggplot的text美学中仅定义系列专属的自定义内容(不包含X值),转为plotly时指定仅显示text,再开启hovermode="x unified"模式。此时plotly会自动在tooltip顶部统一显示当前X值,下方展示每个系列的自定义文本,不会出现X值重复。

示例代码:

library(ggplot2)
library(plotly)

# 构造示例数据
df <- data.frame(
  x = rep(1:5, 2),
  y = c(3,5,2,6,4,2,4,1,5,3),
  group = rep(c("A", "B"), each=5)
)

# 用text美学定义仅包含系列信息的悬停内容
p <- ggplot(df, aes(x=x, y=y, color=group, 
                    text=paste0("组别: ", group, "\n数值: ", y))) +
  geom_line() +
  geom_point()

# 转为plotly并配置悬停模式
ggplotly(p, tooltip = "text") %>%
  layout(hovermode = "x unified")

方案二:用hovertemplate实现自定义悬停,替代text美学

如果需要更精细的tooltip控制,可以用hovertemplate替代text美学。通过customdata传递额外变量,在hovertemplate中拼接自定义内容,同时保留顶部统一X值的显示。

示例代码:

library(ggplot2)
library(plotly)

df <- data.frame(
  x = rep(1:5, 2),
  y = c(3,5,2,6,4,2,4,1,5,3),
  group = rep(c("A", "B"), each=5)
)

# 先构建基础ggplot对象(无需text美学)
p <- ggplot(df, aes(x=x, y=y, color=group)) +
  geom_line() +
  geom_point()

# 转为plotly后设置hovertemplate和悬停模式
ggplotly(p) %>%
  layout(hovermode = "x unified") %>%
  style(
    hovertemplate = paste0(
      "组别: %{customdata}<br>",
      "数值: %{y}<extra></extra>"
    ),
    customdata = df$group
  )

关键说明

  • %{customdata}用于调用传递的额外变量(如示例中的分组信息)
  • <extra></extra>用于隐藏plotly默认添加的系列名称,避免冗余
  • hovermode="x unified"会自动在tooltip顶部显示当前统一的X值,无需手动添加

内容的提问来源于stack exchange,提问作者Cameron Costa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 09:12:37