Plotly图表中add_markers添加的标记图例无法显示求助
问题原因与解决办法
你的代码存在两个核心问题,导致标记点和图例无法正常显示:
- 数据引用失效:使用
inherit = F时,add_markers未指定data参数,但x = ~SYMBOL_TIME是基于数据框的变量引用,此时Plotly找不到对应数据源,无法渲染标记点。 - 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
相关产品推荐
相关产品推荐

