如何在matplotlib散点图中为子组添加第二个图例
我正在使用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')
下面是生成的图像。颜色的映射部分工作得很好,显示了我设置的颜色,但我还没弄明白怎么在图表上添加第二个图例,以说明每种颜色代表的含义。希望能得到一些指导。
谢谢,
Charlie
1 个回答
9
下面是一个如何实现这个的例子。基本上,你需要调用两次legend
这个函数。第一次调用时,你把创建的图例保存到一个变量里。第二次调用会把你第一次创建的图例去掉,这样你就可以用Axes.add_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)