如何在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
相关产品推荐
相关产品推荐

