我正在寻找R中类似于Matlab中命令hold all
的一些技巧
在Matlab中我生成了一些数据:
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,但我对此没有多少经验,但我没有用这个库创建条形图。
如果有办法用ggplot2做到这一点,我想通过解释知道它,因为我想学习它。我将欣赏传统情节系统的解决方案。
附:我使用了barplot(frequency, names.arg = c(b))
,因为我读了here,因为在Matlab的bar
函数中没有R的等价物。
答案 0 :(得分:2)
有时最好告诉我们你要做什么,而不是你是怎么做的。从你的R代码的外观来看,你的boxplot只是一个缩放的直方图,而且来自其他R代码和我想要为正态分布添加参考线的matlab代码的猜测。如果我是正确的那么你将在R中走很长的路。下面的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
函数,了解向条形图添加行的示例。