第一个子图上的Matplotlib图例

时间:2015-12-18 08:52:15

标签: python matplotlib legend

我想在我的图中只绘制一个图例,其中包含不同数字的子图(根据结果从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()

enter image description here enter image description here

1 个答案:

答案 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()