You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Plotly图表中add_markers添加的标记图例无法显示求助

问题原因与解决办法

你的代码存在两个核心问题,导致标记点和图例无法正常显示:

  1. 数据引用失效:使用inherit = F时,add_markers未指定data参数,但x = ~SYMBOL_TIME是基于数据框的变量引用,此时Plotly找不到对应数据源,无法渲染标记点。
  2. Y轴类别不匹配:原图表的Y轴仅包含Label1和Label2,你指定的y = "Symbol"不在现有Y轴类别范围内,即使数据引用正确,标记点也会超出可见区域。

修改后的代码方案

方案一:保留inherit=F并明确指定数据源

由于SYMBOL_TIME的两个值完全相同,取其中一个即可生成标记点:

library(plotly)
library(tidyverse)

my_data = data.frame(
  Y_LABEL = c("Label1", "Label2"),
  START = c(66, 72),
  END = c(20, 28), 
  COLOR_VAR = c("Color1", "Color2"),
  SYMBOL_TIME = c(7.2, 7.2)
)

my_plot <- plot_ly() %>%
  add_segments(data=my_data, 
               x=~START, xend=~END, y=~Y_LABEL, yend=~Y_LABEL,
               color=~COLOR_VAR, line=list(width=9), showlegend=F)

# 为标记点单独指定数据源
my_plot <- my_plot %>% add_markers(
  data = data.frame(x = my_data$SYMBOL_TIME[1], y = "Symbol"),
  x = ~x, y = ~y,
  showlegend = T,
  marker=list(symbol = "diamond", 
              size = 9, 
              color = "white", 
              line = list(color = "blue", width = 1)),
  name = "My Symbol"
)

my_plot

方案二:去掉inherit=F,继承原有数据源

因为SYMBOL_TIME值重复,最终只会显示一个标记点,效果与方案一一致:

my_plot <- my_plot %>% add_markers(
  x = ~SYMBOL_TIME, y = "Symbol", 
  showlegend = T,
  marker=list(symbol = "diamond", 
              size = 9, 
              color = "white", 
              line = list(color = "blue", width = 1)),
  name = "My Symbol"
)

额外说明

修改完成后,标记点会显示在Y轴新增的Symbol类别位置,右侧也会出现设置好的图例。如果需要自定义Y轴类别顺序,可以通过layout(yaxis = list(categoryorder = "array", categoryarray = c("Label1", "Label2", "Symbol")))手动调整。

内容的提问来源于stack exchange,提问作者Display Name

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 17:05:45