【问题标题】:Transforming the height of each factor in a stacked density plot (ggplot2)转换堆积密度图中每个因子的高度 (ggplot2)
【发布时间】:2013-10-04 02:00:31
【问题描述】:

我有一系列数据表明某种类型的 DNA 元素在多久以前在基因组中处于活跃状态。它可能看起来像这样:

data.df <- data.frame(name=c("type1", "type1", "type1", "type2", "type2", "type2"),
                      active=c(9,11,10,21,21,18))

因此,大约 10 年前活跃的三个“type1”元素和 20 年前活跃的三个 type 2 元素。

我使用 ggplot2 创建了一个堆叠密度图,以获取每个元素何时处于活动状态的分布,如下所示:

ggplot(data.df, aes(x=active)) + geom_density(position="stack", aes(fill=name))

我有这些元素的相对丰度的信息,我想将每个元素的高度密度乘以该数字。这最终会给我这些元素在基因组中的实际活动丰度,而不仅仅是它们活动的分布。

所以我的问题归结为:如何根据组将每个元素类型的密度的高度转换/乘以某个因子?例如,如果我的基因组中有 1000 个 1 型元素,而只有 3 个 2 型元素,那么堆积密度图将以 1 型为主,而您几乎看不到与 2 型相关的曲线。

我希望这是有道理的。提前致谢!

【问题讨论】:

    标签: r ggplot2 density-plot


    【解决方案1】:

    我不确定我是否正确理解了您的问题,但这是您想要的吗?

    ggplot(data.df)
    +geom_density(aes(x=active,y=..scaled..,fill=name),position="stack")
    

    ggplot2stat_density 下的帮助说scaled 给出了“密度估计,缩放到最大值1”。

    或者,您也可以在data.frame 中添加权重列(例如wght),在geom_density 中使用weight 参数并忽略警告消息

    data.df=data.frame(name=c("type1","type1","type1","type1","type1","type1","type2", "type2","type2"),active=c(1.1,1,1,1,1,1,17.1,17,17),stringsAsFactors =FALSE)
    data.df=within(data.df,wght<-c(rep(1/6,6),rep(4/9,3)))
    
    ggplot(data.df)+
    geom_density(aes(x=active,y=(..density..),fill=name,weight=wght),position="stack")
    

    但是,我不完全知道 geom_density 如何处理总和不为 1 的权重。

    【讨论】:

    • 重量正是我想要的。 ..scaled.. 将所有曲线缩放到最大高度为 1,这使得更广泛的分布/活动范围在数量上被人为地夸大了。谢谢!
    猜你喜欢
    • 2016-08-11
    • 2014-10-09
    • 1970-01-01
    • 2012-10-10
    • 2019-07-10
    • 1970-01-01
    • 1970-01-01
    • 2020-12-02
    • 1970-01-01
    相关资源
    最近更新 更多