2012-11-18 56 views
1

我的數據看起來有點像這樣:疊加混合

myData <- data.frame(dist1=rep(0.5, 1000), dist2=rnorm(1000,0.8,0.01), dist3=rnorm(1000,0.7,0.05)) 

注意DIST1完全由數0.5。

問題:如何在R中使用ggplot繪製這些數據?

我的失敗嘗試:

如果我嘗試geom_density那麼它不公平對待DIST1:

ggplot(melt(myData), aes(x=value, colour=variable)) + geom_density() 

enter image description here

我知道我可以調整核寬度,但是隨着dist1變得尖銳,dist2和dist3開始分解 enter image description here

如果我嘗試geom_freqpoly然後它自動選擇區邊界,並且使DIST1峯是0.5一側,混亂即希望它是邦上0.5讀者:

ggplot(melt(myData), aes(x=value, colour=variable)) + geom_freqpoly() 

enter image description here

我知道我可以改變垃圾桶寬度,但不是垃圾桶本身,否則我會確保在0.5的任何一邊有等距離的垃圾箱。

+1

我覺得你用'dist1'很大的問題是,你這是在強迫情節創建行的時候,其實你應該繪製點。無論你做什麼,除非'dist1'的分佈(x軸值)非常好,否則該線將從0.5到數據集中的下一個點繪圖。嘗試只繪製點,或創建一個2Xn矩陣'fakedist1',它已經排序了對(0.5,0);(0.5,1000),(0.5,0),並且繪製成一條普通的舊線。 –

+0

不知道我完全理解這些建議。對於繪圖點,你的意思是像geom_dotplot?假設線條建議等於在平滑密度圖(第2和第3層)之上畫一條線(dist1)? – Pengin

回答

0

我找到了一種方法來通過使用stat_bin和線geom來操作bin,而不是geom_freqpoly。似乎給了一個大大改善和可調結果:

ggplot(melt(myData), aes(x=value, colour=variable)) + 
    stat_bin(origin = 0.491, binwidth = 0.006, geom='line', position='identity') 

enter image description here