matplotlib 从图例中排除色调变量

slwdgvem  于 2023-04-06  发布在  其他
关注(0)|答案(1)|浏览(121)

我很难找到一种方法来正确地显示散点图中与标记相关的标签。我的代码如下所示:

fig, ax = plt.subplots(1,1)
plot_white = sns.scatterplot(data=df_white, x='EngCorr_Player', y='EngCorr_Opponent', hue='Elo_Opponent', ax=ax, marker='D', label='White')
plot_black = sns.scatterplot(data=df_black, x='EngCorr_Player', y='EngCorr_Opponent', hue='Elo_Opponent', ax=ax, marker='X', s=140, label='Black')
ax.legend()
plt.show()

这里的问题是色调的变量包含在图例中。Plot 1
如果我在调用图例时尝试指定标签,则第二个图的标记是错误的(圆形,而不是星星)。Plot 2

ax.legend(labels=['White', 'Black'])

如果我指定句柄,用

ax.legend(handles=[plot_white, plot_black], labels=['White', 'Black'])

将显示一个空图例,并显示错误消息 “UserWarning:Legend不支持〈AxesSubplot:xlabel='EngCorr_Player',ylabel='EngCorr_Opponent'〉示例。可以使用代理美工。" 出现。
我试着调查艺术家,但什么也没抓住。

cbwuti44

cbwuti441#

看看这是不是你要找的东西...它和你有的东西很相似。除了你用ax.get_legend_handles_labels()得到图例的句柄和文本,然后只保留那些名字是白色和黑色的,然后调用ax.legend()

fig, ax = plt.subplots(1,1)
ax = sns.scatterplot(data=df_white, x='EngCorr_Player', y='EngCorr_Opponent', hue='Elo_Opponent', ax=ax, marker='D', label='White')
ax = sns.scatterplot(data=df_black, x='EngCorr_Player', y='EngCorr_Opponent', hue='Elo_Opponent', ax=ax, marker='X', s=140, label='Black')
hand, labl = ax.get_legend_handles_labels()
handout=[]
lablout=[]
for h,l in zip(hand,labl):
    if l in ['White', 'Black']:
        lablout.append(l)
        handout.append(h)
ax.legend(handout, lablout)
plt.show()

相关问题