我想在我的图中只绘制一个图例,其中包含不同数字的子图(根据结果从1到5)。应始终在第一个图1上方绘制图例。有没有办法明确告诉matplotlib使用第一个绘图来绘制图例而不是最后一个2?
我试图手动计算位置,以防有多个情节,但它不是很精确,也不是一个好的解决方案。
编辑:解释一下。我知道如何为许多子图绘制一个图例(如图2中所示),但我想知道如何将图例修复为绘制的第一个绘图,而不是最后一个。我试图根据情节数来计算位置,但它不精确,有时看起来很难看(传说进入情节)。我想知道我是否可以告诉matplotlib将图例始终修复为subplot1。
import matplotlib.pyplot as plt
import matplotlib.lines as mlines
plt.figure(1, figsize=(12, 10))
nrows = 5
ncols = 1
plot_number = 1
for i in range(3):
plot = plt.subplot(nrows, ncols, plot_number)
plot_number += 1
p3 = mlines.Line2D([], [], color='r')
p4 = mlines.Line2D([], [], color='b')
plt.legend([p3, p4], ['one', 'two'],loc=4, ncol=4, mode="", borderaxespad=.5, frameon=True,
bbox_to_anchor=(0., 1.02, 1., .102))
plt.show()
答案 0 :(得分:3)
如果您在此处使用面向对象的界面,一切都会变得更简单。然后你可以在特定的子图的轴上调用legend
。我们可以使用plt.subplots
简化您的代码:
import matplotlib.pyplot as plt
import matplotlib.lines as mlines
nrows = 5
ncols = 1
fig, axes = plt.subplots(nrows,ncols,figsize=(12,10))
p3 = mlines.Line2D([], [], color='r')
p4 = mlines.Line2D([], [], color='b')
# axes[0] is the first subplot
axes[0].legend([p3, p4], ['one', 'two'],loc=4, ncol=4, mode="", borderaxespad=.5, frameon=True,
bbox_to_anchor=(0., 1.02, 1., .102))
plt.show()