Plotly R中add_markers图层手动设置颜色问题求助
解决Plotly R中add_markers图层颜色手动设置问题
问题原因
add_markers里错误使用了yend和xend参数,这是线段图层(add_segments)的专属参数,标记点不需要这些,会干扰参数解析;- 你的
EVENT因子有6个不同水平(2、3、4、5、6、9),但只提供了5种颜色,且没明确绑定每个水平对应颜色,Plotly默认按因子顺序分配,导致颜色匹配混乱。
修正代码
df = data.frame( "ID" = as.character(seq(1:10)), "DAY_START" = rep(0, times = 10), "DAY_END" = rep(10, times = 10), "EVENT" = factor(c(2, 2, 2, 2, 3, 4, 5, 6, 5, 9)) ) # 定义命名颜色向量,精准绑定每个EVENT水平和目标颜色 color_map <- c( "2" = "red", "3" = "black", "4" = "turquoise", "5" = "magenta", "6" = "green", "9" = "green" # 若需要给9单独设色,替换成你想要的颜色即可 ) p_plot <- plot_ly() %>% add_segments( data = df, showlegend = FALSE, y=~ID, yend=~ID, x = ~DAY_START, xend = ~DAY_END, line=list(color = "blue", width = 3) ) %>% add_markers( data = df, showlegend = TRUE, y=~ID, x = ~DAY_START, # 移除多余的yend、xend参数 color = ~EVENT, colors = color_map, # 使用命名向量指定颜色映射 marker = list( symbol = "circle", size = 7, line = list(color = "black", width = 1) ) )
关键说明
- 用命名颜色向量直接绑定每个因子水平的颜色,完全手动控制颜色分配,不会出现默认顺序混乱的问题;
- 删掉
add_markers里的yend和xend,标记点仅需要x和y定位即可。
内容的提问来源于stack exchange,提问作者Display Name
相关产品推荐
相关产品推荐

