子情节中的 Matplotlib 传说

我想在下面的每一个次要情节中加入传奇。 我试过了,但是没用。

有什么建议吗?

提前谢谢: -)

f, (ax1, ax2, ax3) = plt.subplots(3, sharex=True, sharey=True)
ax1.plot(xtr, color='r', label='Blue stars')
ax2.plot(ytr, color='g')
ax3.plot(ztr, color='b')
ax1.set_title('2012/09/15')
plt.legend([ax1, ax2, ax3],["HHZ 1", "HHN", "HHE"])
plt.show()

Resulting plot 在 atomh33ls 的建议下:

ax1.legend("HHZ 1",loc="upper right")
ax2.legend("HHN",loc="upper right")
ax3.legend("HHE",loc="upper right")

图例的位置是固定的,但它似乎有一个问题与字符串,因为每个字母放在一个新的行。

有人知道怎么修吗?

enter image description here

262834 次浏览

这应该会奏效:

ax1.plot(xtr, color='r', label='HHZ 1')
ax1.legend(loc="upper right")
ax2.plot(xtr, color='r', label='HHN')
ax2.legend(loc="upper right")
ax3.plot(xtr, color='r', label='HHE')
ax3.legend(loc="upper right")

你想要的是不可能做到的,因为 plt.legend()的地方传奇 在当前的轴上,在你的情况下在最后一个。

另一方面,如果你可以满足于在最后一个次要情节中放置一个全面的图例,你可以这样做

f, (ax1, ax2, ax3) = plt.subplots(3, sharex=True, sharey=True)
l1,=ax1.plot(x,y, color='r', label='Blue stars')
l2,=ax2.plot(x,y, color='g')
l3,=ax3.plot(x,y, color='b')
ax1.set_title('2012/09/15')
plt.legend([l1, l2, l3],["HHZ 1", "HHN", "HHE"])
plt.show()

enter image description here

请注意,传递给 legend的不是示例代码中的轴,而是 plot调用返回的行。

附言

当然,您可以在每个子情节之后调用 legend,但是在我的理解中,您已经知道了这一点,并且正在寻找一种立即执行该操作的方法。

这就是你想要的,并克服了其他答案中的一些问题:

import matplotlib.pyplot as plt


labels = ["HHZ 1", "HHN", "HHE"]
colors = ["r","g","b"]


f,axs = plt.subplots(3, sharex=True, sharey=True)


# ---- loop over axes ----
for i,ax in enumerate(axs):
axs[i].plot([0,1],[1,0],color=colors[i],label=labels[i])
axs[i].legend(loc="upper right")


plt.show()

生产..。 subplots