I'm creating a plot using matplotlib and it seems that I stucked with one problem. I draw 3 subplots and I want to get common legend for all of them
fig, (ax, ax2, ax3) = plt.subplots(3, 1, sharex=True)
ax.plot(FRAME1['T1'],FRAME1['Num'], marker = 'o', label='1')
ax2.plot(FRAME3['T1'],FRAME3['Num'], marker = 'o', label='2',color='r')
ax2.plot(FRAME4['T1'],FRAME4['Num'], marker = 'o', label='3',color='turquoise')
ax3.plot(FRAME2['T1'],FRAME2['Num'], marker = 'o', label='4',color='g')
ax.set_ylim(-118, -116.5)
ax3.set_ylim(-136, -135)
plt.legend( (ax,ax2,ax3),loc="upper left", bbox_to_anchor=[0, 1],
ncol=2, shadow=True, title="Legend", fancybox=True)
I have used the legend instance but it shows legen only on the last subplot.
Of course you need to show the legend on one of the subplots. It's your decision which one you chose.
In order to show all four lines in the legend, you need to provide a reference to the lines to the legend
plt.legend(handles = [line1, line2, ...])
See also the Matplotlib legend guide.
So here is a working example
import numpy as np
import matplotlib.pyplot as plt
x = np.random.randint(0,12,size=(12,4))
y = np.random.randint(0,8,size=(12,4))
fig, (ax, ax2, ax3) = plt.subplots(3, 1, sharex=True, figsize=(5,5))
l, = ax.plot(x[:,0],y[:,0], marker = 'o', label='1')
l2, =ax2.plot(x[:,1],y[:,1], marker = 'o', label='2',color='r')
l3, =ax2.plot(x[:,2],y[:,2], marker = 'o', label='3',color='turquoise')
l4, =ax3.plot(x[:,3],y[:,3], marker = 'o', label='4',color='g')
plt.legend( handles=[l, l2, l3, l4],loc="upper left", bbox_to_anchor=[0, 1],
ncol=2, shadow=True, title="Legend", fancybox=True)
plt.show()

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With