3

同じ長さで異なるスケールのデータを特徴とするggplot密度プロットをオーバーレイする場合、密度が一致するようにプロットのxスケールを正規化することは可能ですか?あるいは、密度yスケールを正規化する方法はありますか?

ここに画像の説明を入力してください

library(ggplot2)

data <- data.frame(x = c('A','B','C','D','E'), y1 = rnorm(100, mean = 0, sd = 1), 
               y2 = rnorm(100, mean = 0, sd = 50))
p <- ggplot(data)

# Overlaying the density plots is a fail
p + geom_density(aes(x=y1), fill=NA) + geom_density(aes(x=y2), alpha=0.3,col=NA,fill='red')

# You can compress the xscale in the aes() argument:
y1max <- max(data$y1)
y2max <- max(data$y2)
p + geom_density(aes(x=y1), fill=NA) + geom_density(aes(x=y2*y1max/y2max), alpha=0.3,col=NA,fill='red')
# But it doesn't fix the density scale. Any solution?

# And will it work with facet_wrap?
p + geom_density(aes(x=y1), col=NA,fill='grey30') + facet_wrap(~ x, ncol=2)

ありがとう!

4

1 に答える 1

4

これはあなたが望んでいたことをしますか?

p + geom_density(aes(x=scale(y1)), fill=NA) + 
    geom_density(aes(x=scale(y2)), alpha=0.3,col=NA,fill='red')

データ引数が1つしかない関数はscale、経験分布を0に集中させ、結果の値をサンプルの標準偏差で除算して、結果の標準偏差を1にします。場所と「圧縮の程度」のデフォルトを変更できます。 「または「拡張」。おそらく、y1とy2に適切なx_scaleを配置することを検討する必要があります。これには、スケールによる前処理が必要になる場合があります。スケーリング係数は、返されたオブジェクトの属性に記録されます。

 attr(scale(data$y2), "scaled:scale")
#[1] 53.21863
于 2012-09-08T14:41:57.377 に答える