I have the following plot in plotnine
. I would like to add a label showing the mean value for the series to the left of the y-axis (essentially in line with the y-axis labels). Even better would be if the label could be shaped as follows, pointing to the mean line. Is this possible?
import numpy as np
import pandas as pd
import datetime
from plotnine import *
df = pd.DataFrame({
'date':pd.date_range(start='1/1/2000', periods=10, freq='A'),
'a': np.random.choice(range(20),10),
'b': np.random.choice(range(20),10),
})
mean_a = df['a'].mean()
mean_b = df['b'].mean()
df = pd.melt(df,id_vars=['date'])
p = (ggplot(df, aes(x='date', y='value', fill='variable'))
+ theme_light()
+ geom_col(position='dodge', alpha=0.8)
+ geom_hline(yintercept=mean_a, linetype='dotted', color='#770d50', size=1.5)
+ geom_hline(yintercept=mean_b, linetype='dotted', color='#0055b3', size=1.5)
+ annotate('label', x=datetime.datetime(2010, 10, 1), y=mean_a, label='{:.1f}'.format(mean_a), color='#770d50', size=8, label_size=0.2)
+ annotate('label', x=datetime.datetime(2010, 10, 1), y=mean_b, label='{:.1f}'.format(mean_b), color='#0055b3', size=8, label_size=0.2)
+ annotate('label', x=datetime.datetime(2011, 1, 1), y=mean_b, label='')
+ scale_x_date(expand=(0,0), labels= lambda l: [v.strftime("%Y") for v in l])
+ scale_fill_manual(('#770d50','#0055b3'))
)
p