Plotly中基于条件着色的散点图自定义True/False分类图例实现
Plotly 基于go.Scatter实现二分类带清晰图例的散点图配置
原有实现的图例失效根源
之前把所有点位放在单个go.Scattertrace内,通过传入和标签绑定的颜色数组实现条件着色的写法,本质上所有点位都属于同一个图层。Plotly的图例是和trace一一绑定生成的,单trace只会生成一个图例项,自然无法拆分出“绿色对应True、红色对应False”的分类标识,这就是之前图例辨识度不足的核心原因。
符合要求的配置实现步骤
- 按标签拆分独立散点图层,而非单图层加条件着色:把数据集里标签为True的所有二维点单独提取成一组坐标(
x_true、y_true),标签为False的所有二维点单独提取成另一组坐标(x_false、y_false),每组坐标对应一个独立的go.Scattertrace - 逐trace配置专属颜色与图例标识:
- True类别的trace:设置
mode='markers'关闭连线,给marker指定绿色填充色,把name参数设置为“True”——这个参数值就是最终侧边图例上展示的分类文本 - False类别的trace:同样设置
mode='markers',给marker指定红色填充色,把name参数设置为“False”
- True类别的trace:设置
- 微调图例展示位置:保持
showlegend为默认开启状态,可通过update_layout里的legend配置项把图例放到图表侧边不遮挡数据的位置,Plotly会自动为两个独立trace生成带对应颜色圆点的分类图例,完全满足标注要求
最小可运行参考代码
import plotly.graph_objects as go import numpy as np # 模拟生成带True/False标签的二维测试数据 np.random.seed(42) # 两类各50个点位 x_true = np.random.normal(2, 1, 50) y_true = np.random.normal(2, 1, 50) x_false = np.random.normal(-2, 1, 50) y_false = np.random.normal(-2, 1, 50) fig = go.Figure() # 新增True类别散点层 fig.add_trace(go.Scatter( x=x_true, y=y_true, mode='markers', marker=dict(color='#2ecc71', size=10), name='True', showlegend=True )) # 新增False类别散点层 fig.add_trace(go.Scatter( x=x_false, y=y_false, mode='markers', marker=dict(color='#e74c3c', size=10), name='False', showlegend=True )) # 配置图例位置到图表右侧外侧 fig.update_layout( legend=dict( x=1.02, y=1, bordercolor='#eee', borderwidth=1 ) ) fig.show()
注意事项
如果后续需要调整图例的样式(比如边框、字体大小、位置),不需要改动散点的颜色映射逻辑,只要在update_layout的legend配置块里调整参数即可,不会破坏两个类别的图例对应关系。
内容的提问来源于stack exchange,提问作者blz
相关产品推荐
相关产品推荐

