Python 如何在matplotlib散点图中为子组添加第二个图例

Python 如何在matplotlib散点图中为子组添加第二个图例,python,matplotlib,scatter,Python,Matplotlib,Scatter,我正在使用matplotlib制作一个绘图,它使用颜色贴图为绘图中的每个子组显示不同的颜色。但是,出于打印目的,子组都是一组x/y对 plt.scatter(rs1.x,rs1.y, marker = 'D', color=cmap ,label='data') plt.plot(rs1.x,rs1.hub_results.predict(), marker = 'x', color = 'g',label = 'Huber Fit') plt.plot(rs1.ol_x,rs1.ol_y, m

我正在使用matplotlib制作一个绘图,它使用颜色贴图为绘图中的每个子组显示不同的颜色。但是,出于打印目的,子组都是一组x/y对

plt.scatter(rs1.x,rs1.y, marker = 'D', color=cmap ,label='data')
plt.plot(rs1.x,rs1.hub_results.predict(), marker = 'x', color = 'g',label = 'Huber Fit')
plt.plot(rs1.ol_x,rs1.ol_y, marker = 'x', color='r', ms=10, mew=2, linestyle = ' ', label='Outliers')
它给出了如下所示的图像。这是给我的颜色,因为我映射他们,使部分工作良好,但我一直无法想出如何添加第二个图例的情节,以显示什么是每种颜色的意义。请告知有关这方面的任何指导

谢谢, 查理


下面是如何做到这一点的示例。基本上,您最终会调用两次
legend
。第一次调用时,将创建的图例保存到变量中。第二个调用将删除您创建的第一个图例,因此之后您可以使用
轴.add\u artist
功能手动将其添加回

import matplotlib.pyplot as plt
import numpy as np

x = np.random.uniform(-1, 1, 4)
y = np.random.uniform(-1, 1, 4)

p1, = plt.plot([1,2,3])
p2, = plt.plot([3,2,1])
l1 = plt.legend([p2, p1], ["line 2", "line 1"], loc='upper left')

p3 = plt.scatter(x[0:2], y[0:2], marker = 'D', color='r')
p4 = plt.scatter(x[2:], y[2:], marker = 'D', color='g')

# This removes l1 from the axes.
plt.legend([p3, p4], ['label', 'label1'], loc='lower right', scatterpoints=1)
# Add l1 as a separate artist to the axes
plt.gca().add_artist(l1)

这非常有用-谢谢!我只有一个后续问题:是否可以放置第二个图例(使用“添加艺术家”的图例)在图表内部数据所在的位置之外的某个地方?对于您显示的图表中的exmaple,如果我可以将第二个图例放在x=2.5处,使其最左边的边缘刚好位于垂直线的左侧,那将是完美的。如果有办法将其移到那里,我在页面上确实有空间。我看到我的后续问题是事实上,在matplotlib文档中回答得非常清楚。很抱歉没有先检查。我的后续问题的答案在这里: