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
相关产品推荐
相关产品推荐

