我正在用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对象在图例上仍显示为条形。
plt.legend
以a开头gca()
(返回当前轴):
# 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))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句