如何移除ggplotly箱线图的须线及对应悬浮提示内容
ggplot转plotly箱线图移除须线、隐藏离群点交互提示的解决方案
移除plotly对象中的须线
ggplotly转换后的箱线图须线存放在每个数据系列的line属性中,直接将须线宽度设为0即可完全隐藏,同时可以直接清空离群点的marker属性,比设置opacity=0更彻底:
# 接你生成p2 <- ggplotly(p1)的代码 # 遍历所有箱线图数据系列,多分组场景也适用 for (i in seq_along(p2$x$data)) { # 隐藏须线 p2$x$data[[i]]$line$width <- 0 # 彻底删除离群点对象,而非仅视觉隐藏 p2$x$data[[i]]$marker <- list() }
移除悬浮提示中不需要的内容
悬浮提示由每个数据系列的hoverinfo和text属性控制,你可以自定义提示内容仅保留需要的信息,也可以直接关闭多余内容的展示:
for (i in seq_along(p2$x$data)) { # 指定仅展示自定义的text内容 p2$x$data[[i]]$hoverinfo <- "text" # 自定义悬浮提示的字段,可根据需求调整 p2$x$data[[i]]$text <- paste0( "分组: ", p2$x$data[[i]]$name, "<br>", "下四分位: ", round(p2$x$data[[i]]$lower, 2), "<br>", "中位数: ", round(p2$x$data[[i]]$middle, 2), "<br>", "上四分位: ", round(p2$x$data[[i]]$upper, 2) ) }
如果不需要对应系列的悬浮提示,也可以直接将hoverinfo设为"skip"即可完全关闭。
自定义stat_summary场景适配
你给出的自定义统计函数绘制箱线图的场景,上述代码完全适用,转换后的plotly对象结构和普通geom_boxplot生成的结构一致,生成p2后直接运行上述两段循环代码即可生效。
完整可运行测试代码
library(plotly) library(ggplot2) # 基础箱线图场景测试 p1 <- ggplot(mtcars, aes( x = factor(vs), y = mpg ) )+ geom_boxplot(outlier.shape = NA, coef = 0) p2 <- ggplotly(p1) # 批量修改所有系列属性 for (i in seq_along(p2$x$data)) { # 隐藏须线 p2$x$data[[i]]$line$width <- 0 # 彻底移除离群点 p2$x$data[[i]]$marker <- list() # 自定义悬浮提示 p2$x$data[[i]]$hoverinfo <- "text" p2$x$data[[i]]$text <- paste0( "分组: ", p2$x$data[[i]]$name, "<br>", "下四分位: ", round(p2$x$data[[i]]$lower, 2), "<br>", "中位数: ", round(p2$x$data[[i]]$middle, 2), "<br>", "上四分位: ", round(p2$x$data[[i]]$upper, 2) ) } # 查看效果 p2
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

