Plotly Express散点子图图例重复问题求助
解决Plotly子图共用图例重复的问题
你现在的问题是每个子图都添加了一整套对应分类的trace,每个trace默认都会显示图例项,导致同一个分类重复出现多次。只需要让第一个子图的trace显示图例,其余子图的trace隐藏图例,同时保证所有同分类trace的名称一致,就能实现共用一个图例的效果。
修改后的代码如下:
num_subplots = len(column_y) rows = (num_subplots + 1) // 2 # 根据子图数量计算行数 cols = 2 if num_subplots > 1 else 1 # 根据子图数量设置列数 # 存储图例标签的字典 legend_labels = {} # 遍历颜色列的唯一分类 for cat in df[color_column].unique().tolist(): # 提取分类的标签 legend_labels[cat] = str(cat).split(": ", 1)[0] fig = make_subplots(rows=rows, cols=cols, subplot_titles=column_y, shared_xaxes=True, shared_yaxes=True, vertical_spacing=0.1, horizontal_spacing=0.1) # 绘制带颜色分类的散点子图 for i, col_y in enumerate(column_y, start=1): scatter = px.scatter(df, x=column_x, y=col_y, color=color_column, color_discrete_sequence=custom_palette, opacity=0.8) scatter.update_traces(marker=dict(size=5)) scatter.for_each_trace(lambda trace: trace.update(name=legend_labels.get(trace.name, trace.name))) row_num = (i + 1) // 2 if num_subplots > 1 else 1 col_num = (i % 2) + 1 if num_subplots > 1 else 1 # 关键修改:只有第一个子图的trace显示图例 show_legend = (i == 1) for trace in scatter.data: fig.add_trace(trace.update(showlegend=show_legend), row=row_num, col=col_num)
关键修改说明:
- 添加了
show_legend = (i == 1)判断,仅第一个子图的trace会显示图例项 - 通过
trace.update(showlegend=show_legend)控制每个trace的图例显示状态 - 因为所有同分类的trace名称和颜色都保持一致,Plotly会自动将它们关联到同一个图例项,点击图例时所有子图的对应分类点都会同步显示/隐藏
内容的提问来源于stack exchange,提问作者Alexandra Payne
相关产品推荐
相关产品推荐

