堆积直方图,如流式细胞仪

use*_*185 2 r histogram ggplot2

我正在尝试使用ggplot或base R来生成如下内容:

在此输入图像描述

我知道如何用ggplot2做直方图,并且可以使用facet_grid或facet_wrap轻松分离它们.但我想垂直"错开"它们,使它们有一些重叠,如下图所示.对不起,我不允许发布我自己的图片,而且很难找到我想要的更简单的图片.如果可以,我只会发布左上角的面板.

我知道这不是一种显示数据的特别好方法 - 但这个决定并不取决于我.

样本数据集如下:

my.data <- as.data.frame(rbind( cbind( rnorm(1e3), 1) , cbind( rnorm(1e3)+2, 2), cbind( rnorm(1e3)+3, 3), cbind( rnorm(1e3)+4, 4)))
Run Code Online (Sandbox Code Playgroud)

我可以用geom_histogram绘制它,如下所示:

ggplot(my.data) + geom_histogram(aes(x=V1,fill=as.factor(V2))) + facet_grid( V2~.)
Run Code Online (Sandbox Code Playgroud)

但我希望y轴重叠.

Pie*_*rre 10

require(ggplot2)
require(plyr)

my.data <- as.data.frame(rbind( cbind( rnorm(1e3), 1) , cbind(     rnorm(1e3)+2, 2), cbind( rnorm(1e3)+3, 3), cbind( rnorm(1e3)+4, 4)))
my.data$V2=as.factor(my.data$V2)
Run Code Online (Sandbox Code Playgroud)

根据V2计算密度

res <- dlply(my.data, .(V2), function(x) density(x$V1))
dd <- ldply(res, function(z){
  data.frame(Values = z[["x"]], 
             V1_density = z[["y"]],
             V1_count = z[["y"]]*z[["n"]])
})
Run Code Online (Sandbox Code Playgroud)

根据V2添加偏移量

dd$offest=-as.numeric(dd$V2)*0.2 # adapt the 0.2 value as you need
dd$V1_density_offest=dd$V1_density+dd$offest
Run Code Online (Sandbox Code Playgroud)

和情节

ggplot(dd, aes(Values, V1_density_offest, color=V2)) + 
  geom_line()+
  geom_ribbon(aes(Values, ymin=offest,ymax=V1_density_offest,     fill=V2),alpha=0.3)+
  scale_y_continuous(breaks=NULL)
Run Code Online (Sandbox Code Playgroud)

结果