【发布时间】:2022-11-24 07:42:03
【问题描述】:
我有两套箱线图,一套是蓝色的,一套是红色的。我希望图例显示每组箱线图的标签,即
传奇: -蓝框- A, -红框- B
在sns.boxplot() 中添加了labels='A' 和labels='B',但无法使用错误消息“没有找到标签放在图例中的艺术家。请注意,当不带参数调用 legend() 时,标签以下划线开头的艺术家将被忽略”.如何添加标签?
插入图片的代码:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
x = list(range(1,13))
n = 40
index = [item for item in x for i in range(n)]
np.random.seed(123)
df = pd.DataFrame({'A': np.random.normal(30, 2, len(index)),
'B': np.random.normal(10, 2, len(index))},
index=index)
red_diamond = dict(markerfacecolor='r', marker='D')
blue_dot = dict(markerfacecolor='b', marker='o')
plt.figure(figsize=[10,5])
ax = plt.gca()
ax1 = sns.boxplot( x=df.index, y=df['A'], width=0.5, color='red', \
boxprops=dict(alpha=.5), flierprops=red_diamond, labels='A')
ax2 = sns.boxplot( x=df.index, y=df['B'], width=0.5, color='blue', \
boxprops=dict(alpha=.5), flierprops=blue_dot, labels='B')
plt.ylabel('Something')
plt.legend(loc="center", fontsize=8, frameon=False)
plt.show()
以下是我使用的软件版本:seaborn 版本 0.11.2。 matplotlib 版本 3.5.1。蟒蛇版本 3.10.1
【问题讨论】:
-
由于我们没有数据来对颜色进行分类,因此我们需要创建图例处理程序和标签。请参考How to manually create a legend。
-
按照本指南进行操作,它适用于以下代码:
red_patch = mpatches.Patch(color='red', label='A') blue_patch = mpatches.Patch(color='blue', label='B') plt.legend(handles=[red_patch, blue_patch], loc="center right", fontsize=8, frameon=False) -
@montvinpeck 您还可以为补丁设置 alpha 和边缘颜色,使它们更类似于箱线图,例如
red_patch = mpatches.Patch(facecolor='red', alpha=0.5, edgecolor='black', label='A')
标签: matplotlib seaborn