R语言Plotly如何设置元素层级实现网格<形状<图片显示顺序
问题根源
Plotly 元素的渲染层级由layer参数固定控制,形状(shapes)的三个层级从底到顶为:
below:位于所有网格线、坐标轴、绘图内容的最下方- 默认值(不手动指定layer时):位于网格线上方,绘图数据(散点、折线、柱形等)下方
above:位于绘图数据上方
图片(images)设置layer='above'时,会渲染在所有形状、绘图数据、网格线的最顶层,符合顶层显示要求。
给形状设置layer='below'时,形状会被渲染到网格线下方,自然达不到预期顺序。另外原示例代码里,图片链接末尾多了一个多余的双引号,会导致图片无法正常加载。
修正方案
去掉形状的layer='below'配置,根据形状和数据的层级需求选择对应参数即可,最终都能满足网格 < 形状 < 图片的顺序:
- 如果需要形状显示在网格上方、绘图数据下方:形状不设置
layer参数,使用默认值 - 如果需要形状显示在网格上方、同时盖住绘图数据:给形状设置
layer='above'
修正后的可运行代码:
library(plotly) plot_ly(type = 'scatter', mode='markers') %>% layout( shapes = list( type = 'line', x0 = 0, x1 = 1, y0 = 0, y1 = 1, line = list(width = 3, color = 'red') # 若需要形状盖住散点,追加参数 layer = 'above' ), images = list( source = 'https://images.plot.ly/language-icons/api-home/r-logo.png?raw=true', x = 0.5, y = 0.5, sizex=0.5, sizey=0.5, xanchor = 'center', yanchor = "middle", layer = 'above' ) )
运行后渲染层级从底到顶为:网格线 → 直线形状 → R logo图片,完全符合预期。
内容的提问来源于stack exchange,提问作者Juliette
相关产品推荐
相关产品推荐

