¿Cómo trazar dos series temporales de pandas en la misma ttwig con leyendas y ejes y secundarios?

Quiero trazar dos series de tiempo en la misma gráfica con el mismo eje x y el eje y secundario. De alguna manera lo he logrado, pero dos leyendas se superponen y no pueden etiquetar el eje x y el eje y secundario. Intenté colocar dos leyendas en la parte superior izquierda y superior derecha, pero aún no funciona.

Código:

plt.figure(figsize=(12,5)) # Number of request every 10 minutes log_10minutely_count_Series = log_df['IP'].resample('10min').count() log_10minutely_count_Series.name="Count" log_10minutely_count_Series.plot(color='blue', grid=True) plt.legend(loc='upper left') plt.xlabel('Number of request ever 10 minute') # Sum of response size over each 10 minute log_10minutely_sum_Series = log_df['Bytes'].resample('10min').sum() log_10minutely_sum_Series.name = 'Sum' log_10minutely_sum_Series.plot(color='red',grid=True, secondary_y=True) plt.legend(loc='upper right') plt.show() 

introduzca la descripción de la imagen aquí

Gracias por adelantado

Las siguientes soluciones funcionan para mí. La primera coloca ambas líneas en una leyenda, la segunda divide las líneas en dos leyendas, similar a lo que está intentando arriba.

Aquí está mi 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')) 

Una solución legendaria, crédito para esta publicación de StackOverflow

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

Una leyenda matplotlib trama

Solución de leyenda dividida

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

Leyenda dividida parcela matplotlib

Puede ser tan simple como:

 df.loc[:,['A','B']].plot(secondary_y=['B'], mark_right=False, figsize = (20,5), grid=True) 

mark_right = False significa que la etiqueta ‘B’ está en el eje izquierdo.