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

合并多数据集后,如何用Seaborn绘制多列数据的多线图?

解决Seaborn绘制多列数据多线图的问题

嘿,我来帮你搞定这个问题!你之前的代码没法运行,是因为Seaborn的lineplot函数对y参数的要求和你想的不一样——它不接受列名的列表,而是需要**长格式(long-form)**的数据结构,或者你得手动分别绘制每条线。下面给你两种靠谱的解决方案:

方法一:转成长格式数据(Seaborn推荐方式)

Seaborn天生更适配长格式数据,我们可以用pandas.melt()把你的宽格式DataFrame转成符合要求的结构,这样能让绘图逻辑更清晰,还能自动生成图例:

import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt

# 先确认合并后的数据集结构(可选,用来验证数据)
print(result.head())

# 将宽格式数据转为长格式
melted_df = result.melt(
    id_vars='x',  # 保留作为横坐标的列
    var_name='density_type',  # 新列:用来区分不同密度数据的名称
    value_name='density_value'  # 新列:对应密度的数值
)

# 绘制多线图,用hue区分不同的密度线
sns.lineplot(x='x', y='density_value', hue='density_type', data=melted_df)

# 显示图形
plt.show()

转成的长格式数据大概长这样:

xdensity_typedensity_value
0density10.5
1density10.6
0density20.7
1density20.8

这样Seaborn会自动根据density_type给不同的线分配颜色,并生成对应的图例,非常省心。

方法二:手动循环绘制每条线(适合少量列的场景)

如果你不想转换数据格式,也可以直接循环遍历要绘制的列,逐个调用lineplot:

import seaborn as sns
import matplotlib.pyplot as plt

# 定义要绘制的密度列列表
density_columns = ['density1', 'density2']

# 创建画布
plt.figure(figsize=(8, 5))

# 循环绘制每条线
for col in density_columns:
    sns.lineplot(x='x', y=col, data=result, label=col)

# 自定义图例和标签
plt.legend(title='Density Series')
plt.xlabel('X Axis')
plt.ylabel('Density Value')

# 显示图形
plt.show()

这种方法更直观,适合只有少数几列需要绘制的情况,你可以完全控制每条线的样式(比如颜色、线型)。

为什么你原来的代码不行?

你之前写的sns.lineplot(x='x', y=['density1', 'density2'], data=result),问题出在y参数——Seaborn的lineplot要求y是单个列名(字符串)或者对应的Series,而不是列名列表。传入列表后函数无法正确解析数据,自然会报错啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 08:27:32