You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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”
  • 微调图例展示位置:保持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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.22 12:36:05