目录
问题描述:
如下两图,想让所有的黑线都共用一个图例bar,而不是每条线都重复图例。
方法1
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots()
x = np.array([[0,1], [0,1], [0,1]])
y = np.array([[0,0], [1,1], [2,2]])
ax.plot([0,1],[0,2], label='foo', color='b')
lines = ax.plot(x.T, y.T, label='bar', color='k')
plt.setp(lines[1:], label="_") # 使用_ 表示不显示标签,此处为除了第一条线,其他都不用标签
# 注意:setp只能处理plot等画图的结果(无论是多条线还是一条线)
# 不能处理如 axLine, axLabel = ax.get_legend_handles_labels()中的axline结果
ax.legend()
plt.show()
方法2
ax.plot(x.T, y.T, label='bar', color='k')
handles, labels = ax.get_legend_handles_labels()
ax.legend([handles[0]], [labels[0]], loc='best')
或者
ax1 = ax.plot(x.T, y.T, label='bar', color='k')
plt.legend(handles=[ax1[0]], loc='best')
方法3
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots()
x = np.array([[0,1], [0,1], [0,1]])
y = np.array([[0,0], [1,1], [2,2]])
ax.plot([0,1],[0,2], label='foo', color='b')
ax.plot(x.T, y.T, color='k')
ax.plot(x[0].T, y[0].T, label='bar', color='k')
# 画线时不用标签,然后再单独画第一条线时用标签
ax.legend()
plt.show()
参考:
python - 使用一个`plot`绘制多条曲线时的一个图例条目 - IT工具网 (coder.work)
python - One legend entry when plotting several curves using one `plot` call - Stack Overflow