R语言Plotly按钮切换图表图例不显示:添加name=~B无效
Plotly按钮切换数据集+正常显示图例的解决方法
你当前的问题根源在于:把整个数据集(df/df2)当作单个trace来添加,每个trace里包含了B的两个类别(aaa、bbb),这种情况下即使加name=~B也无法生成对应两个类别的图例——因为单个trace只能绑定一个图例项。
正确的做法是把每个数据集里的不同B类别拆成独立的trace,再通过按钮统一控制同一数据集下所有trace的可见性,具体修改后的代码如下:
library(plotly) library(data.table) df <- data.table( A = as.factor(c(0, 0, 1, 1, 2, 2, 3, 3)), B = as.factor(rep(c("aaa", "bbb"), 4)), C = c(10, 90, 15, 85, 2, 98, 19, 81), couleur = rep(c("#eb927d", "#3cc7ed"), 4) ) df2 <- data.table( A = as.factor(c(0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5 , 6, 6)), B = as.factor(rep(c("aaa", "bbb"), 7)), C = c(10, 90, 15, 85, 2, 98, 19, 81, 40, 60, 20, 80, 64, 36), couleur = rep(c("#eb927d", "#3cc7ed"), 7) ) # 按钮逻辑:控制4个trace的可见性(df的aaa、df的bbb、df2的aaa、df2的bbb) buttons <- list( list( method = "restyle", args = list("visible", list(TRUE, TRUE, FALSE, FALSE)), label = "button 1" ), list( method = "restyle", args = list("visible", list(FALSE, FALSE, TRUE, TRUE)), label = "button 2" ) ) # 逐个添加每个B类别的trace plot_ly() %>% # 添加df的aaa类别 add_trace( data = df[B == "aaa"], x = ~C, y = ~A, type = "bar", marker = list(color = ~couleur), name = "aaa", visible = TRUE ) %>% # 添加df的bbb类别 add_trace( data = df[B == "bbb"], x = ~C, y = ~A, type = "bar", marker = list(color = ~couleur), name = "bbb", visible = TRUE ) %>% # 添加df2的aaa类别 add_trace( data = df2[B == "aaa"], x = ~C, y = ~A, type = "bar", marker = list(color = ~couleur), name = "aaa", visible = FALSE ) %>% # 添加df2的bbb类别 add_trace( data = df2[B == "bbb"], x = ~C, y = ~A, type = "bar", marker = list(color = ~couleur), name = "bbb", visible = FALSE ) %>% layout( barmode = "stack", updatemenus = list( list( buttons = buttons, direction = "down", pad = list("r" = 10), showactive = TRUE, x = 0.65, xanchor = "left", y = 1.1, yanchor = "top" ) ) )
关键修改点说明:
- 拆分trace:每个B类别对应一个独立的
add_trace,这样每个trace都能绑定对应的图例名称(name参数) - 按钮可见性调整:因为现在有4个trace,按钮需要控制这4个trace的可见状态——button1对应前两个trace(df的两个类别)显示,后两个隐藏;button2则相反
- 图例自动生成:每个trace的
name设置为B的类别值,Plotly会自动生成对应的图例项,且切换数据集时图例也会同步对应当前显示的类别
内容的提问来源于stack exchange,提问作者nimliug
相关产品推荐
相关产品推荐

