如何在Plotly中设置图表文本与悬停提示文本不同
在Plotly条形图中分别设置图表显示文本与悬停提示内容
我来帮你搞定这个问题!其实Plotly早就考虑到了这种需求,咱们只需要分开控制图表上显示的文本和悬停提示的内容这两个独立的参数就行,下面结合你的iris数据示例给你具体演示:
首先先把数据处理好(和你原来的代码一致):
library(plotly) library(dplyr) data(iris) df <- iris %>% group_by(Species) %>% summarise(n = n(), avg = mean(Sepal.Length))
方法一:用hovertext快速实现区分
这种方式最直接,用text控制条形上显示的内容,用hovertext定义悬停时的详细信息:
p1 <- plot_ly(data = df, x = ~Species, y = ~n, type = "bar", # 这里设置条形图上直接显示的内容,比如只展示样本数量 text = ~paste("数量:", n), textposition = "auto", # 定义悬停时要弹出的详细内容,这里可以放你需要的所有信息 hovertext = ~paste("物种:", Species, "<br>平均花萼长度:", round(avg, 2), "<br>样本数量:", n), # 指定悬停时只显示我们定义的hovertext内容 hoverinfo = "text") # 查看图表 p1
方法二:用hovertemplate实现更灵活的自定义格式
如果你想更精细地控制悬停提示的排版(比如去掉默认的冗余标签),可以用hovertemplate配合customdata,自由度更高:
p2 <- plot_ly(data = df, x = ~Species, y = ~n, type = "bar", # 条形上显示的内容换成平均花萼长度,和悬停内容区分开 text = ~paste("平均长度:", round(avg, 2)), textposition = "auto", # 自定义悬停模板,%{x}对应x轴物种,%{y}对应y轴数量,%{customdata}对应我们传入的avg hovertemplate = "物种: %{x}<br>样本数量: %{y}<br>平均花萼长度: %{customdata}<extra></extra>", # 把平均长度数据传入模板 customdata = ~avg) # 查看图表 p2
关键知识点总结
text参数:专门控制图表元素(比如条形上)直接显示的文本内容,想显示啥就写啥hovertext/hovertemplate:负责定义悬停提示的内容,前者适合快速写内容,后者适合精细排版- 如果用
hovertext,记得加上hoverinfo="text",避免Plotly默认显示其他冗余信息;用hovertemplate的话不需要额外设置,模板会自动覆盖默认悬停内容
内容的提问来源于stack exchange,提问作者Arlaf
相关产品推荐
相关产品推荐

