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

Seaborn绘制DataFrame时指定Target列线型后图例不匹配求助

问题解决:Seaborn绘图图例样式不匹配

问题根源:你手动调用ax.legend(legend)时,相当于完全重置了图例——直接用传入的文字生成新图例,完全没关联之前绘图时设置的Target列的线条样式,所以图例里的$z^*$才会显示默认的蓝色实线。

给你两种解决思路:

思路1:让Seaborn自动生成匹配样式的图例

直接给第二个lineplot指定label,让Seaborn自动合并两部分的图例,样式会自动同步:

fig = plt.figure() 
# 绘制其他列,自动生成图例项
ax = sns.lineplot(data=df[cols_to_plot])
# 绘制Target列,指定label,样式和图例绑定
ax = sns.lineplot(data=df['Target'], linestyle="-.", color='k', label=r'$z^*$')
ax.set_ylabel(y_label)
ax.set_xlabel(x_label)
# 删掉手动传legend的代码,用Seaborn自动生成的图例
# ax.legend(legend)
fig.tight_layout()
fig.savefig(sv_pth, format='pdf') 

思路2:自定义图例文字同时保留样式

如果需要保留原来的legend列表自定义文字,先让Seaborn生成带样式的图例,再修改对应文本:

fig = plt.figure() 
ax = sns.lineplot(data=df[cols_to_plot])
# 给Target列临时指定一个label,方便后续定位
ax = sns.lineplot(data=df['Target'], linestyle="-.", color='k', label='Target')
ax.set_ylabel(y_label)
ax.set_xlabel(x_label)

# 获取现有图例的手柄和标签
handles, labels = ax.get_legend_handles_labels()
# 找到Target对应的位置,替换成你需要的$z^*$
target_pos = labels.index('Target')
labels[target_pos] = r'$z^*$'
# 用修改后的标签更新图例
ax.legend(handles, labels)

fig.tight_layout()
fig.savefig(sv_pth, format='pdf') 

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 16:25:12