R语言Plotly如何在已有图表注释下方添加额外星号注释
Plotly(R) 图表下方添加多条注释的正确方法
问题背景
我在使用R语言的Plotly库绘制柱状图时,已经成功在图表下方添加了第一条注释,初始可运行代码如下:
library(plotly) plot_ly( x = c("giraffes*", "whale**", "monkeys"), y = c(20, 14, 23), name = "SF Zoo", type = "bar" ) |> layout(annotations = list(x = 0, y = -0.1, text = "Note: * The tallest animal.", showarrow = F, xref='paper', yref='paper') )
初始代码生成的图表效果:
现在需要在第一条注释的正下方新增第二条注释,文本内容为"Note: ** Тhe longest animal "。之前尝试在原有注释列表里重复加text字段的写法完全无效,错误代码如下:
library(plotly) plot_ly( x = c("giraffes*", "whale**", "monkeys"), y = c(20, 14, 23), name = "SF Zoo", type = "bar" ) |> layout(annotations = list(x = 0, y = -0.1, text = "Note: * The tallest animal.", text = Note: ** Тhe longest animal, # 错误写法 showarrow = F, xref='paper', yref='paper') )
错误原因
上述写法不能生效有两个核心问题:
- R语言的列表中同名字段会被后写入的值覆盖,同一个注释列表里写两个
text,最终只会保留最后一个text的内容,不可能生成两条独立注释 - 第二条注释的文本没有包裹字符串引号,本身就不符合R的语法规则,运行会直接报错。
正确实现方案
Plotly的annotations参数支持传入由多个注释配置组成的列表集合:你只需要把每一条注释单独封装为一个独立的配置列表,再把所有注释列表放到一个大列表里传给annotations即可。要让第二条注释显示在第一条下方,只需要把第二条注释的y坐标(paper参考系下,y值越小位置越靠下)设置得比第一条更小即可。
如果注释位置太靠下被画布边缘截断,可以额外加margin参数调大底部边距。
可直接运行的正确代码:
library(plotly) plot_ly( x = c("giraffes*", "whale**", "monkeys"), y = c(20, 14, 23), name = "SF Zoo", type = "bar" ) |> layout( annotations = list( # 第一条注释 list( x = 0, y = -0.1, text = "Note: * The tallest animal.", showarrow = F, xref='paper', yref='paper' ), # 第二条注释,y值设为-0.2,位于第一条正下方 list( x = 0, y = -0.2, text = "Note: ** Тhe longest animal", showarrow = F, xref='paper', yref='paper' ) ), # 调大底部边距,避免注释被截断 margin = list(b = 100) )
内容的提问来源于stack exchange,提问作者silent_hunter
相关产品推荐
相关产品推荐

