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
相关产品推荐
相关产品推荐

