R,二项分布图

时间:2013-07-20 06:48:00

标签: r graph

我必须编写自己的函数来绘制二项分布的密度函数,从而绘制 当n = 20且p = 0.1,0.2,...,0.9时的适当图。我还需要对图表进行评论。

我试过了;

   graph <- function(n,p){
               x <- dbinom(0:n,size=n,prob=p)
               return(barplot(x,names.arg=0:n))
            }


   graph(20,0.1)
   graph(20,0.2)
   graph(20,0.3)
   graph(20,0.4)
   graph(20,0.5)
   graph(20,0.6)
   graph(20,0.7)
   graph(20,0.8)
   graph(20,0.9)

   #OR
   graph(20,scan())

我的第一个问题:除了使用graph(20,p)之外,有什么办法让我不需要多次写下scan()行吗?

我的第二个问题:

我想在一台设备上看到图表,或者想点击ENTER查看下一张图表。我写了

   par(mfcol=c(2,5))
   graph(20,0.1)
   graph(20,0.2)
   graph(20,0.3)
   graph(20,0.4)
   graph(20,0.5)
   graph(20,0.6)
   graph(20,0.7)
   graph(20,0.8)
   graph(20,0.9)

但图表太小了。如何通过给出头线n = 20和p =用于绘制图形的值来很好地呈现图形?[虽然可以通过在调用函数mtext()之后编写graph来完成但是这样做我必须写几次类似的线。所以我想这样做,包括在函数graph中。 ]

我的上一个问题:

关于评论。图表显示,随着成功的概率,p正在增加,图表趋于正确,即图表是正确的。

有没有办法使用program对图表发表评论?

2 个答案:

答案 0 :(得分:7)

这是mapply的一项工作,因为你循环了2个变量。

graph <- function(n,p){
  x <- dbinom(0:n,size=n,prob=p)
  barplot(x,names.arg=0:n,
         main=sprintf(paste('bin. dist. ',n,p,sep=':')))
}
par(mfcol=c(2,5))
  mapply(graph,20,seq(0.1,1,0.1))

enter image description here

答案 1 :(得分:2)

绘制基本图形是您经常要使用for循环的次数之一。原因是因为大多数绘图函数都不可见地返回一个对象,但你对这些函数不感兴趣;你想要的只是绘图的副作用。循环忽略返回的对象,而*apply系列将浪费精力收集和返回它们。

par(mfrow=c(2, 5))
for(p in seq(0.1, 1, len=10))
{
    x <- dbinom(0:20, size=20, p=p)
    barplot(x, names.arg=0:20, space=0)
}