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)
