【问题标题】:Plotting graphs on current barplot in R在 R 中的当前条形图上绘制图形
【发布时间】:2014-11-04 22:19:40
【问题描述】:

我正在寻找类似于在 Matlab 中命令 hold all 的 R 技术。
在 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,但我对此没有太多经验,而且我未能使用该库创建 barplot。
如果有办法用 ggplot2 做到这一点,我想通过解释来了解它,因为我想学习它。我也会欣赏传统情节系统的解决方案。
附言我使用了barplot(frequency, names.arg = c(b)),因为我读过here,在R 中没有对应Matlab 的bar 函数。

【问题讨论】:

    标签: r matlab plot ggplot2


    【解决方案1】:

    有时,最好告诉我们您要做什么,而不是告诉我们您要如何做。从您的 R 代码的外观来看,您的箱线图只是一个缩放的直方图,而从其他 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 函数,了解向条形图添加线条的示例。

    【讨论】:

    • 谢谢,非常有帮助!我试图翻译我在大学实验室期间编写的代码,但很高兴知道它可能会以更简单的方式完成。
    猜你喜欢
    • 2021-11-03
    • 2012-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-28
    • 1970-01-01
    • 2018-02-08
    • 1970-01-01
    相关资源
    最近更新 更多