Je veux tracer deux séries chronologiques sur le même tracé avec le même axe x et l'axe y secondaire. J'ai en quelque sorte réalisé cela, mais deux légendes se chevauchent et ne peuvent pas donner d'étiquette à l'axe x et à l'axe y secondaire.J'ai essayé de mettre deux légendes en haut à gauche et en haut à droite, mais cela ne fonctionne toujours pas.
Code:
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()
Merci d'avance
Les solutions suivantes fonctionnent pour moi. La première place les deux lignes dans une légende, la seconde divise les lignes en deux légendes, similaire à ce que vous essayez ci-dessus.
Voici mon 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'))
Une solution de légende, crédit à this StackOverflow post
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()
Solution de légende divisée
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()
Cela peut être aussi simple que:
df.loc[:,['A','B']].plot(secondary_y=['B'], mark_right=False, figsize = (20,5), grid=True)
mark_right = False signifie que l'étiquette 'B' est sur l'axe gauche.