如何在seaborn.lineplot中分别设置标记和线条的透明度
实现方案
要实现线条透明度高于标记(即线条更淡、标记更实)的效果,核心是分别控制折线和标记的透明度,不要使用统一的alpha参数。你可以直接使用以下修改后的代码实现需求:
import matplotlib import matplotlib.pyplot as plt import seaborn as sns import pandas as pd matplotlib.rcParams['legend.handlelength'] = 0 matplotlib.rcParams['legend.numpoints'] = 1 data = [{'method': 'end-to-end', 'k': 1, 'time': 181.0, 'auc': 69.76}, {'method': 'end-to-end', 'k': 2, 'time': 193.0, 'auc': 71.12}, {'method': 'end-to-end', 'k': 3, 'time': 256.0, 'auc': 71.84}, {'method': 'end-to-end', 'k': 4, 'time': 302.0, 'auc': 71.87}, {'method': 'end-to-end', 'k': 5, 'time': 365.0, 'auc': 71.89}, {'method': 'end-to-end', 'k': 8, 'time': 602.0, 'auc': 71.87}, {'method': 'end-to-end', 'k': 10, 'time': 743.0, 'auc': 71.84}, {'method': 'first', 'k': 1, 'time': 82.0, 'auc': 69.01}, {'method': 'first', 'k': 2, 'time': 105.0, 'auc': 69.45}, {'method': 'first', 'k': 3, 'time': 171.0, 'auc': 70.11}, {'method': 'first', 'k': 4, 'time': 224.0, 'auc': 70.36}, {'method': 'first', 'k': 5, 'time': 279.0, 'auc': 70.74}, {'method': 'first', 'k': 8, 'time': 517.0, 'auc': 70.81}, {'method': 'first', 'k': 10, 'time': 654.0, 'auc': 70.98}] data = pd.DataFrame(data) # 先绘制折线,不显示标记,设置低透明度让线条更淡 g = sns.lineplot(x='time', y='auc', data=data, sort=False, hue='method', style="method", dashes=False, alpha=0.3, legend=False) # 再绘制散点标记,设置高透明度让标记更实 sns.scatterplot(x='time', y='auc', data=data, hue='method', style='method', markers=['o','v'], s=49, alpha=1) plt.legend(loc='lower right') plt.show()
你可以根据需求调整折线的alpha参数,数值越小线条越透明;散点的s=49对应原来的markersize=7(散点大小参数s为面积,等于标记尺寸的平方),也可以按需调整。
内容的提问来源于stack exchange,提问作者namespace-Pt
相关产品推荐
相关产品推荐

