【发布时间】:2020-06-16 03:09:50
【问题描述】:
背景
我正在尝试根据我在expression levels 中的数据对一种植物(拟南芥)的约 11,000 个基因进行分组,以响应光照。
每个基因的原始值是连续随机变量,但我希望将这些值离散化为具有 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()
而且我知道matplotlib.pyplot's hist() 允许您在默认设置“自动”生成这些分组时提取箱...
总结问题
问题是,我如何对我的基因进行分组?这是一个比仅仅询问matplotlib's hist()... 的seaborn 版本更广泛的问题,因为seaborn's distplot 使用KDE。
通过查看以下可用方法,我似乎无法从 seaborn 创建的 ax 对象中获取垃圾箱:
dir(sns.distplot(d, fit=stats.laplace, kde=False)
我想,一种方法是检查 seaborn 的 distplot 源代码的内容,弄清楚他们如何在绘图之前对数据进行分类......但这远远超出了我的独角兽技能......
【问题讨论】:
-
distplot 是一个直方图,顶部有一个 kde 的图。那些是独立的。由于 KDE 没有“分组”,我不确定这个问题的真正目的是什么?
-
@ImportanceOfBeingErnest,感谢您的编辑。还有你更深层次的理解:我想问题是,什么算法决定了分箱,我想我可以四处寻找源代码的直方图部分。谢谢朋友!
标签: python grouping histogram seaborn discrete-mathematics