标签缺少matplotlib图例

时间:2015-12-16 19:06:57

标签: matplotlib

我正在使用matplotlib绘制子图,并且图例中没有显示图例。 在此示例中,散点图图例未显示。

import numpy as np
import matplotlib
from matplotlib import pyplot as plt
from matplotlib.legend_handler import HandlerLine2D
from matplotlib.patches import Rectangle, Circle

fig = plt.figure()
plt.cla()
plt.clf()

x = np.arange(5) + 1
y = np.full(5, 10)
fig, subplots = plt.subplots(2, sharex=False, sharey=False)
subplots[0].bar(x, y, color='r', alpha=0.5, label='a')
scat = subplots[0].scatter(x, y-1, color='g', label='c')
subplots[0].set_yscale('log')

subplots[1].bar(x, y, color='r', alpha=0.5, label='a')
x = [2, 3]
y = [4, 4]
subplots[1].bar(x, y, color='b', alpha=1, label='b')
subplots[1].set_yscale('log')

plt.legend(loc='center left', bbox_to_anchor=(1, 0.5), handler_map={scat: HandlerLine2D(numpoints=4)})

plt.show()

以下是我尝试的解决方法:

p1 = Rectangle((0, 0), 1, 1, fc="r", alpha=0.5)
p2 = Rectangle((0, 0), 1, 1, fc="b")
p3 = Circle((0, 0), 1, fc="g")
legend([p1, p2, p3], ['a', 'b', 'c'], loc='center left', bbox_to_anchor=(1, 0.5))

我真的更喜欢在没有解决方法的情况下解决这个问题,所以如果有人知道如何修复它,请告诉我。 此外,解决方法的一个问题是Circle对象仍然在图例上显示为条形。

1 个答案:

答案 0 :(得分:0)

plt.legendgca()(返回当前轴)开头:

# from pyplot.py:
def legend(*args, **kwargs):
   ret = gca().legend(*args, **kwargs)

因此,调用plt.legend只会让您获得最后一个子图上的图例。但是也可以调用例如ax.legend(),或您的subplots[0].legend()。将其添加到代码的末尾为我提供了两个子图的图例。

样品:

for subplot in subplots:
    subplot.legend(loc='center left', bbox_to_anchor=(1, 0.5))