ggplotly:如何在text美学中同时使用常规变量与特殊变量?
解决ggplotly提示框同时显示原变量与统计count值的问题
当用geom_bar()配合ggplotly做交互式图表时,直接在aes(text)里混合原变量Time和统计生成的..count..会报错,原因是geom_bar()会自动执行统计变换,原变量和统计变量的作用域在aes上下文中不兼容。下面提供两种可行的解决办法:
方法一:使用after_stat()明确引用统计变量
ggplot2 3.3.0及以上版本推荐用after_stat()替代旧的..var..语法,它能明确指定在统计变换完成后引用生成的变量,同时保留原变量的映射:
library(tidyverse) library(plotly) data(ChickWeight) ChickWeight %>% ggplot(aes(x = Time, text = paste("时间:", format(Time), "\n数量:", after_stat(count)))) + geom_bar() ggplotly(tooltip = "text")
方法二:提前计算统计量再绘图
先手动统计每个Time对应的观测数量,再用geom_col()(无需自动统计变换)绘图,这种方式更直观,完全避免作用域问题:
library(tidyverse) library(plotly) data(ChickWeight) # 提前计算每个Time的count值 chick_count <- ChickWeight %>% count(Time, name = "count") chick_count %>% ggplot(aes(x = Time, y = count, text = paste("时间:", format(Time), "\n数量:", count))) + geom_col() ggplotly(tooltip = "text")
内容的提问来源于stack exchange,提问作者Tom Wagstaff
相关产品推荐
相关产品推荐

