【发布时间】:2021-11-10 13:43:31
【问题描述】:
我在plotnine 中有以下情节。我想在 y 轴左侧添加一个显示系列平均值的标签(基本上与 y 轴标签一致)。如果标签的形状如下,指向平均线,那就更好了。这可能吗?
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
【问题讨论】: