2014-11-04 65 views
0

我正在尋找一些R中類似的技術來在Matlab中命令hold all
在Matlab中我產生了一些數據:在R中的當前barplot上繪製圖形

x = normrnd(0,1,1000,1); 
[a,b]=hist(x,20); 
L=b(2)-b(1); 
area=sum(L*a); 
frequency=a/area; 
bar(b,frequency,1); 
hold all; 
range=b(1):0.1:b(20); 
f1=normpdf(range,0,1); 
f2=normpdf(range,2,2); 
plot1=plot(range,f1,'r'); 
plot2=plot(range,f2,'m'); 
hold off; 

我想創建類似的東西在R.我已經試過這樣:

x <- rnorm(1000) 
h <- hist(x, breaks = 20) 
a <- h$counts 
b <- h$mids 
L <- b[2] - b[1] 
area <- sum(L*a) 
frequency = a/area 
range <- seq(b[1],b[20], by = 0.1) 
f1 <- dnorm(range,0,1) 
f2 <- dnorm(range,2,2) 
barplot(frequency, names.arg = c(b)) 

而且我在這裏停下,因爲​​我不知道如何添加另一個圖表到當前的情節。我試圖使用ggplot2,但我沒有太多的經驗,我沒有用這個庫創建barplot。
如果有辦法用ggplot2做到這一點,我想知道它與解釋,因爲我想了解它。我會很欣賞傳統劇情繫統的解決方案。
P.S.我使用了barplot(frequency, names.arg = c(b)),因爲我讀了here,R的Matlab函數沒有等價的功能。

回答

2

有時候最好告訴我們你想做什麼,而不是你如何去做。從你的R代碼的外觀來看,你的boxplot只是一個縮放直方圖,來自其他R代碼,而我從你想要爲正態分佈添加參考線的matlab代碼猜測。如果我是正確的,那麼你要對這個在河很長的路要走下列R-代碼簡單得多:

x <- rnorm(1000) 
hist(x, prob=TRUE) 
curve(dnorm(x,0,1), add=TRUE) 
curve(dnorm(x,2,2), add=TRUE) 

更妙的是添加col='blue'或類似curve電話。如果你真的覺得有必要選擇自己的x值,那麼你可以用更換電話曲線:

lines(range, dnorm(range, 0, 1)) 
lines(range, dnorm(range, 2, 2)) 

如果你真的想學行添加到barplot,那麼你應該認識到,默認位置酒吧可能不是你所期望的。查看R的TeachingDemos包中的updateusr函數,以獲取將線添加到barplot的示例。

+0

謝謝你,那非常無禮!我試圖翻譯我在大學時在實驗室中編寫的代碼,但很高興知道它可能會以更簡單的方式完成。 – 2014-11-04 22:42:02