r - 转换堆积密度图中每个因子的高度 (ggplot2)

标签 r ggplot2 density-plot

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

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

因此大约 10 年前有 3 个“1 型”元素活跃,20 年前有 3 个 2 型元素活跃。

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

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

Stacked sample plot

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

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

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

最佳答案

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

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

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

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

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 的权重。

关于r - 转换堆积密度图中每个因子的高度 (ggplot2),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19171990/

相关文章:

R 语言感知代码重新格式化/重构工具?

r - 调整 lapply、arrangeGrob 制作的多个图的宽度

r - 删除 ggplot 中中断之间的刻度

r - 将图例添加到具有重叠密度图的 ggplot 直方图

r - 带密度曲线的条形图

r - 如何在R中的相关矩阵中提取相邻变量之间的值?

R-从列中的字符串中提取数字

mysql - 在 R 中使用 RMySQL 和 .my.cnf 文件连接到数据库

r - 如何在 ggplot2 或 R 中绘制雷达图

r - ggplot2:在两个密度图上排列 x 限制