Мы создаем нечто, похожее на ваши данные:
c = pd.DataFrame({'exon':['CENPV_'+str(i+1) for i in range(5)],
'mean':np.random.poisson(100,5),
'percentage':np.random.randint(low=10,high=100,size=5)})
c['Overall mean'] = c['mean'].mean()
В качестве столбца у вас есть overall mean
, поэтому ggplot2 (или plotnine) интерпретирует его как диапазон непрерывных значений для отображения цветов.
Вам нужно предоставить среднее значение в виде массива, а цвет в виде списка:
dodge_text = position_dodge(width=0.9)
(ggplot(c, aes(x='exon', y='mean'))
+ geom_bar(stat='identity', position='dodge', show_legend=False)
+ geom_text(aes(label='percentage'),
position=dodge_text,
size=8, va='bottom', format_string='{}%')
+ geom_hline(aes(yintercept = c['mean'].mean(), color=["Overall mean"]))
+ scale_color_manual(values="yellow",name=' ')
)