Фон
Я пытаюсь сгруппировать ~ 11 000 генов вида растения ( Arabidopsis thaliana ), по имеющимся у меня данным об их изменении уровней экспрессии в ответ на воздействие света.
Необработанные значения для каждого гена являются непрерывными случайными переменными, но я хочу sh, чтобы дискретизировать значения, скажем, для 20 дискретных классов.
Итак, вместо:
change_in_expression = array([-2.2, -1.1, -1.2, ..., 0.6, -1. , -0.9])
У меня есть выходы класса:
change_in_expression = array(["3_to_4","2_to_3","1_to_2",...])
Что я пробовал
Я строю распределение с seaborn's distplot()
, который, я полагаю, использует KDE :
import seaborn as sns
d = array([-2.2, -1.1, -1.2, ..., 0.6, -1. , -0.9]) # = change_in_expression
dis = sns.distplot(d, fit=stats.laplace, kde=False)
plt.title("Distribution of Differential Expression")
plt.xlabel("Log2FoldChange in expression")
plt.ylabel("Frequency")
plt.show()
![enter image description here](https://i.stack.imgur.com/o12dn.png)
И я знаю, что matplotlib.pyplot's
hist()
позволяет извлекать ячейки, когда настройки по умолчанию "автоматически" генерируют эти группировки ...
Резюме Вопрос
Вопрос в том, как я могу сгруппировать мои гены? Это более широкий вопрос, чем просто запрос seaborn
версии matplotlib's
hist()
..., поскольку seaborn's
distplot
использует KDE .
Не похоже, что я могу получить контейнеры из объекта ax
, созданного seaborn, взглянув на методы, доступные из:
dir(sns.distplot(d, fit=stats.laplace, kde=False)
Я думаю, один из способов был бы чтобы проверить внутренности distplot
исходного кода Seaborn'а, выяснить, как они складывают данные перед построением графика ... но это далеко за пределы моего набора навыков единорога ...