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

Seaborn图例与绘图线条不匹配,颜色及线条样式异常求助

Seaborn绘图异常问题原因分析

问题代码

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

v_exponents = range(2, 9)
vs = [2 ** exponent - 1 for exponent in v_exponents]
df = pd.read_csv('data/out/erdos_renyi_graph/path_lengths_dfs/stats.csv')
for v in vs:
    df_filtered = df[df['V'] == v]
    print(df_filtered)
    sns.lineplot(data=df_filtered, x="E", y="fraction_connected")
plt.legend(title="V", labels=vs)
plt.savefig(f'src/main/python/erdos_renyi_graph/path_lengths_dfs/doc/img/ErdosRenyiGraph-PathLengthsDFS.png')

运行后出现以下异常:

  • 图例与绘图线条不匹配
  • 线条粗细交替出现
  • 同色线条重复出现
  • 颜色仅显示蓝至红的渐变范围

异常原因

  • 未利用Seaborn分组功能,循环重复绘图导致叠加:每次循环调用sns.lineplot时,没有通过hue参数指定按V值分组,Seaborn会把每次绘制的线条当作独立系列。当循环次数超过默认调色板的颜色数量时,颜色会重复,同时多次绘制会导致同色线条出现两条。
  • 手动设置图例与实际绘制的线条不对应:plt.legend(title="V", labels=vs)是手动指定图例,但没有关联实际绘制的线条对象,而循环中绘制的线条数量和系列标识与手动设置的vs无法匹配,导致图例错位。
  • 线条粗细交替是默认绘图样式的循环叠加:Seaborn默认会交替使用不同的线条样式(粗细、虚实等)来区分系列,多次调用sns.lineplot会触发这种样式循环,从而出现线条粗细交替的现象。

修复方案

无需循环,直接通过hue参数让Seaborn自动按V值分组绘图,同时自动生成匹配的图例:

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

v_exponents = range(2, 9)
vs = [2 ** exponent - 1 for exponent in v_exponents]
df = pd.read_csv('data/out/erdos_renyi_graph/path_lengths_dfs/stats.csv')
# 过滤目标V值的数据
df_target = df[df['V'].isin(vs)]
# 用hue指定分组字段,自动生成对应图例和颜色
sns.lineplot(data=df_target, x="E", y="fraction_connected", hue="V")
plt.savefig(f'src/main/python/erdos_renyi_graph/path_lengths_dfs/doc/img/ErdosRenyiGraph-PathLengthsDFS.png')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 17:30:06