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

Seaborn lineplot图例未显示正确线条颜色:双Pandas系列绘图问题

解决Seaborn双折线图图例颜色不匹配问题

问题描述

使用Seaborn绘制两个数据集的折线图时,手动设置图例后出现颜色不匹配的问题,代码如下:

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

sns.axes_style("ticks")

ss_data = pd.read_csv('A.csv')
ks_data = pd.read_csv('B.csv')

g = sns.lineplot(data=ks_data, x="K", y="pd", dashes=False)
sns.lineplot(data=ss_data, x="K", y="pd", dashes=False)
g.set_xticks(range(0,22,4))
plt.legend(labels=["A", "B"])
plt.savefig("test.png", dpi=500)

解决方案

核心问题是未给每个折线图指定label参数,导致Matplotlib无法正确关联线条与图例文本。修改后的代码如下:

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

# 正确应用ticks样式(用with块限定作用范围)
with sns.axes_style("ticks"):
    ss_data = pd.read_csv('A.csv')
    ks_data = pd.read_csv('B.csv')

    # 给每个lineplot添加label参数,明确对应图例文本
    sns.lineplot(data=ks_data, x="K", y="pd", dashes=False, label="A")
    sns.lineplot(data=ss_data, x="K", y="pd", dashes=False, label="B")
    
    # 设置x轴刻度
    plt.gca().set_xticks(range(0,22,4))
    # 自动生成匹配的图例,无需手动指定labels
    plt.legend()
    plt.savefig("test.png", dpi=500)

原因说明

  1. 图例关联逻辑:原代码中第二个lineplot未被注册到图例系统,手动调用plt.legend(labels=["A", "B"])时,Matplotlib仅会匹配第一个线条的颜色,导致第二个图例项颜色与实际线条不对应。
  2. 样式应用问题:原代码中的sns.axes_style("ticks")仅返回样式字典,并未实际应用到绘图中。使用with块可以确保样式仅作用于当前绘图代码块,也可改用sns.set_style("ticks")进行全局样式设置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 22:10:35