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

使用Plotly Express如何将同一列的多数据系列绘制在同一张图中

实现双序列同图绘制的两种方案

先纠正你现有代码的两个明显错误:

  1. 你示例的源数据是空格分隔,但代码里用了delimiter=',',如果实际文件是空格分隔要改成delimiter='\s+'
  2. 你提取数值时列索引写错了:你用df[1]筛选名称为name_a的行,说明第1列是序列名称,对应的y值应该在第2列(索引为2),你之前写loc[:,1]拿到的还是名称列,取不到数值。

方案1:用plotly express原生参数实现(最简洁)

plotly express本身支持按列自动区分多序列,不需要手动拆分DataFrame,直接用color参数指定序列名称列即可:

import pandas as pd
import plotly.express as px

# 读取数据,注意分隔符要和实际文件匹配,这里提前给列命名方便后续调用
df = pd.read_csv(filename_results, delimiter='\s+', header=None, names=['series_name', 'y_value'])

# 一键生成双序列散点图,color参数会自动按series_name的不同值拆分系列
fig = px.scatter(df, y='y_value', color='series_name')
# 如果要画折线图直接换成px.line即可
# fig = px.line(df, y='y_value', color='series_name')

fig.show()

方案2:手动追加第二个系列(适配你现有拆分逻辑)

如果已经提前拆分好了两个序列的数值,可以用plotly的add_trace方法追加第二个系列:

import pandas as pd
import plotly.express as px
import plotly.graph_objects as go

# 准备数据
df = pd.read_csv(filename_results, delimiter='\s+', header=None)
df_subset_a = df.loc[df[0] == 'name_a'] # 注意列索引要和实际数据对应,如果名称在第一列索引就是0
df_subset_b = df.loc[df[0] == 'name_b']

values_a = df_subset_a.loc[:,1]
values_b = df_subset_b.loc[:,1]

fig = px.scatter(y=values_a, labels={'y':'name_a'})
# 追加第二个散点系列
fig.add_trace(go.Scatter(y=values_b, mode='markers', name='name_b'))
# 如果是折线图就把mode改成'lines'或者'lines+markers'

fig.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 09:36:03