The following solutions work for me. The first puts both lines in one legend, the second divides the lines into two legends, similar to what you are trying to do above.
Here is my dataframe
ts = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000)) df = pd.DataFrame(np.random.randn(1000, 4), index=ts.index, columns=list('ABCD'))
One Legend Solution, StackOverflow post credit
plt.figure(figsize=(12,5)) plt.xlabel('Number of requests every 10 minutes') ax1 = df.A.plot(color='blue', grid=True, label='Count') ax2 = df.B.plot(color='red', grid=True, secondary_y=True, label='Sum') h1, l1 = ax1.get_legend_handles_labels() h2, l2 = ax2.get_legend_handles_labels() plt.legend(h1+h2, l1+l2, loc=2) plt.show()

Sharing a Legendary Decision
plt.figure(figsize=(12,5)) plt.xlabel('Number of requests every 10 minutes') ax1 = df.A.plot(color='blue', grid=True, label='Count') ax2 = df.B.plot(color='red', grid=True, secondary_y=True, label='Sum') ax1.legend(loc=1) ax2.legend(loc=2) plt.show()

source share