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

Plotly Express散点图如何自定义标记形状并按type字段着色

问题原因

你当前代码直接将ind1、ind2作为散点图的X、Y轴维度,没有将「指标类别」作为独立分类字段传入Plotly的形状映射参数,因此所有点会使用默认统一标记,无法按指标区分形状。
注:如果直接将两个指标分别作为X/Y轴,单个点会同时对应两个指标的取值,逻辑上无法给单个点分配唯一的标记形状。

修正方案
  • 先将原始宽格式数据表转换为长格式:把ind1、ind2两个指标列合并为统一的指标值列,新增专门的字段标记每个数据点属于ind1还是ind2
  • 调用px.scatter时,通过symbol参数指定按指标类别映射标记形状,通过symbol_map自定义两类指标对应的形状,保留color参数按type字段映射颜色的规则。
完整实现代码
import pandas as pd
import plotly.express as px

# 原始数据
data = {'ind1':[4,8,12,13,22,23],'ind2':[1,5,9,60,90,30],'type':['reg1','reg2','reg1','reg1','reg2','reg1']}
df = pd.DataFrame(data=data)
# 新增样本ID作为X轴维度,可根据实际业务需求替换为其他X轴字段
df['sample_id'] = df.index

# 宽表转长表,拆分出指标名称、指标值两个字段
df_long = df.melt(
    id_vars=['sample_id', 'type'],
    value_vars=['ind1', 'ind2'],
    var_name='indicator',
    value_name='value'
)

# 绘制散点图
fig = px.scatter(
    df_long,
    x='sample_id',
    y='value',
    color='type',
    symbol='indicator',
    # 手动指定形状映射:ind1为圆形,ind2为三角形
    symbol_map={'ind1': 'circle', 'ind2': 'triangle-up'}
)
fig.show()
实现效果
  • 所有归属ind1指标的点显示为圆形,归属ind2指标的点显示为三角形
  • 点的颜色完全按照type字段的取值自动映射区分
  • 如果需要调整X轴展示内容,只需替换x参数传入的对应字段即可。

内容的提问来源于stack exchange,提问作者mariem

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.06 16:15:43