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

ggplot2转plotly后hover显示Tumor_Volume为NA及Group重复问题求助

问题修复方案

问题原因

你遇到的hover提示显示Tumor_Volume为NA、Group重复的问题,根源在于:

  • stat_summary是在绘图时动态计算均值,ggplotly无法将这些临时生成的汇总值与原始数据的Tumor_Volume字段关联,因此hover时显示NA;
  • 多个stat_summary图层(线、点、误差棒)都携带了Group的映射信息,导致hover提示中重复显示该字段。

解决方案1:提前汇总数据(推荐)

先对数据按Group和Day分组计算均值与标准误,再用汇总后的数据绘图,这样ggplotly能准确识别汇总值,同时避免图层重复映射导致的字段重复。

library(ggplot2)
library(plotly)
library(dplyr)

# 提前计算每个分组+时间点的均值和标准误
summary_data <- mouse_data %>%
  group_by(Group, Day) %>%
  summarise(
    mean_tumor = mean(Tumor_Volume, na.rm = TRUE),
    se_tumor = sd(Tumor_Volume, na.rm = TRUE)/sqrt(n()),
    .groups = "drop"
  )

# 基于汇总数据绘制图表
p <- ggplot(summary_data, aes(x = Day, y = mean_tumor, color = Group)) +
  geom_line(size = 1) +
  geom_point(size = 2) +
  geom_errorbar(aes(ymin = mean_tumor - se_tumor, ymax = mean_tumor + se_tumor),
                width = .5, size = 0.7) +
  labs(y = "肿瘤体积(均值)") +
  theme_classic()

# 转换为plotly并指定hover显示字段
ggplotly(p, tooltip = c("Day", "mean_tumor", "Group"))

解决方案2:调整stat_summary的映射

如果坚持使用stat_summary动态计算,可通过after_stat()明确映射计算后的均值,同时指定hover显示字段避免重复:

library(ggplot2)
library(plotly)

mouse_data$Mouse <- as.factor(mouse_data$Mouse)
mouse_data$Group <- as.factor(mouse_data$Group)

p <- ggplot(mouse_data, aes(x=Day, y=Tumor_Volume, color=Group)) + 
  stat_summary(aes(y = after_stat(y)), fun=mean, geom="line", size=1) +
  stat_summary(aes(y = after_stat(y)), fun=mean, geom="point", size=2) +
  stat_summary(fun.data = mean_se, geom='errorbar', width=.5, size=0.7) +
  theme_classic() 

# 指定hover显示的字段,过滤冗余内容
ggplotly(p, tooltip = c("x", "y", "color"))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 02:34:52