Matplotlib在子图中传说

时间:2014-11-19 12:31:13

标签: python matplotlib

我想把传说放在下面的每个子图中。 我试过用plt.legend但它没有用。

有什么建议吗?

提前致谢: - )

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

3 个答案:

答案 0 :(得分:29)

这应该有效:

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")

答案 1 :(得分:12)

你想要的是什么,因为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调用返回的行。

PS

当然你可以在每个子情节之后调用legend,但根据我的理解,你已经知道并且正在寻找一种方法来实现它。

答案 2 :(得分:2)

这可以满足您的要求,并克服了其他答案中的一些问题:

const Dashboard = props => {
  return (
    <div
      style={{ height: "100vh", display: "flex", flexFlow: "column nowrap" }}
    >
      <div>
        <PageHeader />
      </div>
      <div style={{ flex: 1 }}>
        <SidebarExample>
          <DashboardContent />
        </SidebarExample>
      </div>
    </div>
  );
};

...产生... subplots