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

如何在matplotlib或seaborn多线图中将指定线条加粗并自定义颜色

解决方案

你之前直接设置linewidth或size参数未生效的原因是:linewidth是全局统一设置所有线条宽度的参数,而size参数需要和分组字段绑定、同时搭配sizes参数传入宽度映射才会生效。

方法1:通过seaborn的size参数直接映射线宽

将size参数绑定到region分组字段,通过sizes传入自定义宽度字典即可实现不同线条的宽度区分,完整可运行代码如下:

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

data = {'year': ['1998','1998','1998','1998','1998','1998','1998','1999','1999','1999','1999','1999','1999','1999'],'region':['Adygea','Altai Krai','Amur Oblast','Arkhangelsk','Astrakhan','Bashkortostan','Belgorod','Adygea','Altai Krai','Amur Oblast','Arkhangelsk','Astrakhan','Bashkortostan','Belgorod'],  'sales':[8.8, 19.2,21.2, 10.6,18,17.5,23, 10, 17.8, 20.5, 12.6, 19.9, 16, 21]}

df = pd.DataFrame(data)

plt.figure(figsize=(12, 6))

palette1 = {c:'#079b51' if c=='Astrakhan' else 'grey' for c in df['region'].unique()}
# 自定义线宽映射
size_map = {c:4 if c=='Astrakhan' else 1 for c in df['region'].unique()}

sns.lineplot(
    x= 'year', 
    y='sales', 
    data=df,
    hue='region', 
    palette=palette1,
    size='region', # 线宽按region字段分组
    sizes=size_map # 传入自定义宽度映射规则
)
plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left')
plt.show()

方法2:绘制完成后单独修改指定线条属性

如果不想修改原有lineplot的传参逻辑,也可以在绘图完成后遍历画布上的线条对象,匹配到目标分组后单独修改线宽,仅需要在原有代码基础上新增4行:

# 你原有代码不变,新增以下内容
ax = plt.gca()
for line in ax.lines:
    if line.get_label() == 'Astrakhan':
        line.set_linewidth(4) # 可自定义调整加粗宽度

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 13:36:05