Изменение легенды в сюжете - PullRequest
1 голос
/ 14 января 2020

У меня вопрос по поводу легенды на сюжетной сюжетной линии.

import pandas as pd
import numpy as np
from pandas.api.types import CategoricalDtype
from plotnine import *
from plotnine.data import mpg
%matplotlib inline


c= pd.read_excel("cenpv.xlsx")
c.head()


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 = "Overall mean", color="Overall mean")))

Я ожидал, что у легенды будет только желтая линия с общим значением метки. Можно ли это изменить?

plot in plotnine

1 Ответ

1 голос
/ 15 января 2020

Мы создаем нечто, похожее на ваши данные:

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=' ')
)

enter image description here

...