R中geom_area转plotly后tooltip始终显示相同值的问题求助
问题分析与解决:geom_area转plotly后tooltip数值异常
问题原因
plotly转换ggplot的堆叠geom_area时,默认会将堆叠后的累计高度值绑定到所有区域的tooltip上,而非每个分组的原始数值。这是因为geom_area的堆叠逻辑是先计算累计高度再绘制图形,但plotly在转换过程中没有正确区分各分组的独立数值,反而把总累计值当成了每个区域的tooltip内容。而geom_bar的堆叠逻辑在转换时,plotly能正确识别每个分组的独立数值,因此tooltip显示正常。
解决办法
方法1:自定义tooltip文本(推荐)
在ggplot的aes中指定text参数,自定义要显示的tooltip内容,让plotly直接使用该文本,避免数值混淆:
library(ggplot2) library(plotly) df <- data.frame(a = c(2020,2021,2022,2020,2021,2022), b = c('Product A','Product A','Product A','Product B','Product B','Product B'), c = c(500,540,630,70,140,100)) plot <- ggplot(df, aes(x = a, y = c, fill = b, text = paste("年份:", a, "\n产品:", b, "\n数值:", c))) + geom_area(position = 'stack') ggplotly(plot, tooltip = "text")
方法2:修改plotly跟踪数据
直接修改plotly生成的对象,将堆叠后的累计y值替换为原始分组的数值:
library(ggplot2) library(plotly) df <- data.frame(a = c(2020,2021,2022,2020,2021,2022), b = c('Product A','Product A','Product A','Product B','Product B','Product B'), c = c(500,540,630,70,140,100)) plot <- ggplot(df, aes(x = a, y = c, fill = b)) + geom_area(position = 'stack') p <- ggplotly(plot) # 替换每个跟踪的y值为对应分组的原始数值 p$x$data[[1]]$y <- df$c[df$b == "Product A"] p$x$data[[2]]$y <- df$c[df$b == "Product B"] p
内容的提问来源于stack exchange,提问作者Romain
相关产品推荐
相关产品推荐

