如何为相对KDE图添加对应数据集标签?
解决seaborn.kdeplot多数据集标签显示异常的问题
你当前的写法里,sns.kdeplot接收列表形式的多个数据集时,label参数没法自动把列表里的标签对应到每个数据集,反而会把整个标签列表当成单一标签用,这就是标签显示不对的原因。下面给两种可行的解决方法:
方法一:分别调用kdeplot绘制每个数据集
直接为每个数据集单独调用一次kdeplot,并给每个调用指定对应的标签,这样能保证标签和数据集精准对应,还能灵活调整单个数据集的样式:
import numpy as np import matplotlib.pyplot as plt import seaborn as sns np.random.seed(0) data1 = np.random.normal(0, 1, 1000) data2 = np.random.normal(2, 1, 500) plt.figure(figsize=(6, 6)) # 逐个绘制数据集并指定标签 sns.kdeplot(data1, label='Data 1', fill=True, bw_adjust=1) sns.kdeplot(data2, label='Data 2', fill=True, bw_adjust=1) plt.title('Relative density plots') plt.xlabel('Value') plt.ylabel('Density') plt.legend() plt.show()
方法二:整理数据为DataFrame,用hue参数区分
这种方式更贴合seaborn的设计逻辑,把数据合并成带分组标识的DataFrame,通过hue参数自动区分不同数据集,标签会自动从分组列生成:
import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns np.random.seed(0) data1 = np.random.normal(0, 1, 1000) data2 = np.random.normal(2, 1, 500) # 合并数据并添加分组列 df = pd.DataFrame({ 'Value': np.concatenate([data1, data2]), 'Group': ['Data 1']*len(data1) + ['Data 2']*len(data2) }) plt.figure(figsize=(6, 6)) # 用hue指定分组列,自动生成对应标签 sns.kdeplot(data=df, x='Value', hue='Group', fill=True, bw_adjust=1) plt.title('Relative density plots') plt.xlabel('Value') plt.ylabel('Density') plt.legend() plt.show()
内容的提问来源于stack exchange,提问作者sam wolfe
相关产品推荐
相关产品推荐

