子图外的主要人物图例

时间:2019-05-13 14:37:06

标签: python-3.x matplotlib legend

我在一个图形中有许多子图。每个图都绘制多条线,这些线表示同一事物(用颜色表示),但是在不同情况下(不同的子图)。我想在图的底部创建一个图例,以显示线条的颜色含义。但是,我遇到了使图例不与子图重叠的问题,如果我可以调整轴,则要保存图例。

我在here的帮助下尝试了几种不同的解决方案,但是无法适应子图。以下是我正在使用的示例代码。

import numpy as np
import matplotlib.pyplot as plt

m1=1
m2=10

x=np.linspace(0,100,num=101,endpoint=True)
y1m1=m1*x**2
y2m1=m1*x**0.5
y1m2=m2*x**2
y2m2=m2*x**0.5

fig=plt.figure(figsize=(4,4))
ax1=fig.add_subplot(211)
ax1.plot(x,y1m1,'b',label=r'$x^2$')
ax1.plot(x,y2m1,'r',label=r'$\sqrt{x}$')
ax2=fig.add_subplot(212)
ax2.plot(x,y1m2,'b')
ax2.plot(x,y2m2,'r')
fig.legend(loc='lower center',ncol=2)
fig.tight_layout()
fig.savefig('examplefig.png',dpi=300)
plt.show()

我的目标是将输出保存到png中以获得良好的身材。

1 个答案:

答案 0 :(得分:0)

这是使用here提供的建议来完成的一种方法。想法是将图例添加到相对于给定轴对象的位置。对于您的情况,由于要在图例的底部添加图例,因此最好指定相对于ax2的位置。使用ncol=2是个人选择的问题。

fig=plt.figure(figsize=(4,4))
ax1=fig.add_subplot(211)
l1, = ax1.plot(x,y1m1,'b')
l2, = ax1.plot(x,y2m1,'r')
ax2=fig.add_subplot(212)
ax2.plot(x,y1m2, 'b')
ax2.plot(x,y2m2, 'r')

ax2.legend(handles = [l1,l2] , labels=[r'$x^2$', r'$\sqrt{x}$'],
           bbox_to_anchor=(0.7, -0.2), ncol=2)

fig.tight_layout()

enter image description here