如何在具有熔化数据的ggplot中缩放密度图(对于几个变量)

Ami*_*min 10 plot r ggplot2

我有一个融化的数据集,其中还包括从正态分布生成的数据.我想绘制我的数据的经验密度函数与正态分布,但两个生成的密度图的比例是不同的.我可以找到两个独立数据集的这篇文章:

标准化ggplot中叠加密度图的x标度

但我无法弄清楚如何将其应用于融化数据.假设我有一个这样的数据框:

df<-data.frame(type=rep(c('A','B'),each=100),x=rnorm(200,1,2)/10,y=rnorm(200))
df.m<-melt(df)
Run Code Online (Sandbox Code Playgroud)

使用以下代码:

qplot(value,data=df.m,col=variable,geom='density',facets=~type)
Run Code Online (Sandbox Code Playgroud)

生成此图表: 在此输入图像描述

鉴于正态分布是参考图,我怎样才能使这两种密度具有可比性?(我更喜欢用qplot而不是ggplot)

更新: 我想生产这样的东西(即在情节比较方面)但是ggplot2:

plot(density(rnorm(200,1,2)/10),col='red',main=NA) #my data
par(new=T)
plot(density(rnorm(200)),axes=F,main=NA,xlab=NA,ylab=NA) # reference data
Run Code Online (Sandbox Code Playgroud)

产生这个: 在此输入图像描述

jlh*_*ard 9

这是你的想法吗?

在此输入图像描述

有一个内置变量,..scaled..可以自动完成.

set.seed(1)
df<-data.frame(type=rep(c('A','B'),each=100),x=rnorm(200,1,2)/10,y=rnorm(200))
df.m<-melt(df)
ggplot(df.m) + 
  stat_density(aes(x=value, y=..scaled..,color=variable), position="dodge", geom="line")
Run Code Online (Sandbox Code Playgroud)


mar*_*bel 6

df<-data.frame(type=rep(c('A','B'),each=100),x = rnorm(200,1,2)/10, y = rnorm(200))
df.m<-melt(df)

require(data.table)
DT <- data.table(df.m)
Run Code Online (Sandbox Code Playgroud)

将带有缩放值的新列插入DT.然后情节.

这是图像代码:

DT <- DT[, scaled := scale(value), by = "variable"]
str(DT)

ggplot(DT) +
  geom_density(aes(x = scaled, color = variable)) +
  facet_grid(. ~ type)

qplot(data = DT, x = scaled, color = variable,
      facets = ~ type, geom = "density")

# Using fill (inside aes) and alpha outside(so you don't get a legend for it)
ggplot(DT) +
  geom_density(aes(x = scaled, fill = variable), alpha = 0.2) +
  facet_grid(. ~ type)

qplot(data = DT, x = scaled, fill = variable, geom = "density", alpha = 0.2, facets = ~type)

# Histogram
ggplot(DT, aes(x = scaled, fill = variable)) +
  geom_histogram(binwidth=.2, alpha=.5, position="identity") +
  facet_grid(. ~ type, scales = "free")

qplot(data = DT, x = scaled, fill = variable, alpha = 0.2, facets = ~type)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述