R Plotly:如何仅显示tasktype着色图例而非交互分组项
解决Plotly 3D图图例冗余问题
要只保留tasktype的颜色图例并将其移至图表下方,你可以通过图例分组和控制单条图例显示来实现,同时调整图例布局:
步骤1:设置图例分组并默认隐藏所有图例
在plot_ly()中添加legendgroup = ~tasktype,将相同tasktype的线条归为同一图例组;同时设置showlegend = FALSE,先隐藏所有自动生成的split分组图例。
步骤2:手动开启每个tasktype组的第一个图例条目
遍历每个tasktype的唯一值,找到对应组的第一个trace,开启其图例显示,这样图例就只会展示tasktype的分类。
步骤3:调整图例位置到图表下方
通过layout()设置图例为水平排列,并定位到图表底部居中位置。
完整代码示例
library(plotly) library(dplyr) # 生成基础图表 p <- dt %>% plot_ly( x = ~x.center, y = ~y.center, z = ~z.center, type = 'scatter3d', mode = 'lines+markers', opacity = 1, marker = list(size = 2), split = ~interaction(spreadsheet_row, participant.id), color = ~tasktype, legendgroup = ~tasktype, # 按tasktype分组图例 showlegend = FALSE # 默认隐藏所有图例 ) # 获取所有唯一的tasktype值 unique_tasktypes <- unique(dt$tasktype) # 为每个tasktype组开启第一个trace的图例显示 for (task in unique_tasktypes) { # 找到当前tasktype对应的第一个trace索引 first_trace_idx <- which(sapply(p$x$data, function(t) t$legendgroup == task))[1] p$x$data[[first_trace_idx]]$showlegend <- TRUE } # 调整图例到图表下方,水平居中 p <- p %>% layout( legend = list( orientation = "h", # 水平排列图例 x = 0.5, y = -0.2, # 位置:底部居中 xanchor = "center", yanchor = "top" ) ) # 展示图表 p
说明
legendgroup = ~tasktype确保同一tasktype的所有线条属于同一图例组,点击图例时会同时控制该组所有线条的显示/隐藏。- 只开启每个组第一个trace的图例,避免重复显示相同
tasktype的图例条目。 - 图例位置参数可根据需求调整
y值(比如y=-0.15会更靠近图表)。
内容的提问来源于stack exchange,提问作者Jinjin
相关产品推荐
相关产品推荐

