2017-02-13 2 views
0

2つの正規分布を重ね合わせたいと思います。私は狭いintervallにXLIM制限する場合は、プロットは非常に奇妙に見える:ggplot2に正規分布をスーパーインポーズする:Bug?

see here

library(ggplot2) 
x=seq(1,6,.01) 
dat <- data.frame(
    c1 = dnorm(x,4.95, .72), 
    c2 = dnorm(x,4.85, .91), x = x 
) 
    ggplot(data=dat, aes(x=x)) + 
    geom_polygon(aes(y=dat[,1]), fill="red", alpha=0.6) + 
    geom_polygon(aes(y=dat[,2]), fill="blue", alpha=0.6) + 
    xlab("Scale") + ylab("") + xlim(1,6) 

範囲を大きくすると、それが動作:

see here

x=seq(1,10,.01) 
    dat <- data.frame(
     c1 = dnorm(x,4.95, .72), 
     c2 = dnorm(x,4.85, .91), x = x 
    ) 
     ggplot(data=dat, aes(x=x)) + 
     geom_polygon(aes(y=dat[,1]), fill="red", alpha=0.6) + 
     geom_polygon(aes(y=dat[,2]), fill="blue", alpha=0.6) + 
     xlab("Scale") + ylab("") + xlim(1,10) 

(出力については図を参照)。しかし、x軸を1から6に制限したいと思います。どんな助けでも大歓迎です! また、プロットの右側にラベルを追加する方法はありますか?

+1

を再配置し、ビットを清掃、これは重畳とは何の関係もありません。単一のポリゴンのみをプロットすると、同様の結果が得られます。 –

答えて

1

これはバグではありません.y軸がx軸に再結合する前に範囲を切り捨てるので、ポリゴンが最初の点に折り返されます。 X軸にポリゴンを配置する場合は、geom_ribbonを使用できます。

ggplot(dat) + 
    aes(x, ymin = 0) + 
    geom_ribbon(aes(ymax = c1), fill = 'red', alpha = 0.6) + 
    geom_ribbon(aes(ymax = c2), fill = 'blue', alpha = 0.6) + 
    xlim(1, 6) 
+0

ありがとうございます。あなたはこれに "c1 - red"と "c2 - blue"という伝説をどのように追加しますか? – Paul

+0

@Paulアプローチでは機能しません。別の答えは、alistaireによって、それを行う方法を示しています。データを変更して、分布を記述する変数(例では 'var')が含まれるようにする必要があります。 –

2

geom_areaposition = "identity"を使用できます。ところで、

library(tidyverse) 

ggplot(dat %>% gather(var, val, -x), aes(x = x, y = val, fill = var)) + 
    geom_area(alpha = 0.6, position = 'identity') + 
    labs(x = "Scale", y = NULL, fill = 'Variable') 

area plot

+1

'geom_area'はきちんとしています。 –

+0

ありがとうございます。これで解決しました。 – Paul

関連する問題