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

如何修改Seaborn图例fontsize且不改变原有linestyle设置

问题原因

你现在的代码调整字体时会重置已有线型的核心原因是重复调用了ax.legend():

第一次调用ax.legend()生成图例实例后,你修改了其中3~6号线条的线型;但之后调用plt.setp(ax.legend().get_texts(), fontsize=15)时,ax.legend()会重新生成一个全新的默认图例,直接覆盖了你之前修改过线型的旧图例,所以之前的linestyle配置才会失效。

解决方法

方法1:复用同一个图例实例(修改量最小)

拿到图例实例后,先后修改线型、字体,全程不重复生成图例即可:

ax = sns.lineplot(data=drinkability_df, x='threshold', y='undrinkable', hue='models_undrinkable', linewidth=2)
ax = sns.lineplot(data=drinkability_df, x='threshold', y='drinkable', hue='models_drinkable', linestyle='--', linewidth=2)
plt.title('Identifying Water Types By Thresholds', fontsize= 18)
plt.xlabel('Thresholds', fontsize= 16)
plt.ylabel('Drinkable Or Undrinkable', fontsize= 16)

# 只生成一次图例实例,后续所有修改都基于这个实例操作
legend = ax.legend()
# 修改指定位置的线型
style_lines = legend.get_lines()
for i in range(3,6):
    style_lines[i].set_linestyle("--")
# 直接修改当前图例的文字大小,不重新生成图例
plt.setp(legend.get_texts(), fontsize=15);

方法2:生成图例时直接指定字体大小

也可以在第一次调用ax.legend()的时候直接传入fontsize参数,一步到位:

# 生成图例时直接指定字体大小,后续只需要修改线型即可
legend = ax.legend(fontsize=15)
style_lines = legend.get_lines()
for i in range(3,6):
    style_lines[i].set_linestyle("--")

两种方法都不会触发图例的重新生成,也就不会覆盖你已经设置好的linestyle配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 16:39:05