【问题标题】:Matplotlib legend on first subplot [duplicate]第一个子图上的 Matplotlib 图例 [重复]
【发布时间】:2016-03-24 22:22:45
【问题描述】:

我只想用不同数字的子图(根据结果从一到五个)在我的图中绘制一个图例。图例应始终绘制在第一个 plot1 上方。有没有办法明确告诉 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()

【问题讨论】:

  • 展示示例代码通常会更好,即使它在您看来是微不足道的。对我们来说,在现有代码的基础上进行构建比从头开始为您编写代码要容易得多。
  • 对不起,我忘了添加我的代码。我知道您提到的链接,但我想知道如何直接对 matplotlib 说以修复图例以绘制一个。我没有固定数量的地块,因此没有固定的位置。这就是问题所在。

标签: python matplotlib legend


【解决方案1】:

如果你在这里使用面向对象的接口,一切都会变得更简单。然后,您可以在特定子图的轴上调用 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()

【讨论】:

  • 好的,我明白了。感谢您指向面向对象的接口,非常有帮助!
猜你喜欢
  • 2018-07-18
  • 2014-10-06
  • 2015-08-05
  • 1970-01-01
  • 2016-02-11
  • 2012-10-14
  • 1970-01-01
  • 2020-11-24
  • 2021-10-30
相关资源
最近更新 更多