Plot 如何在NetLogo中绘制直方图上的分布曲线?

Plot 如何在NetLogo中绘制直方图上的分布曲线?,plot,histogram,netlogo,normal-distribution,agent-based-modeling,Plot,Histogram,Netlogo,Normal Distribution,Agent Based Modeling,我正在为NetLogo中蜜蜂的食物交换编写一个简单的模型。我画了一个柱状图来显示蜜蜂在每个蜱虫的不同食物量的分布。现在我想在每次运行模型时绘制一条覆盖直方图的正态分布曲线,即一条符合直方图条的曲线。我用一支笔用这个命令绘制了我的直方图:海龟的直方图[食物] 还编写了这样的函数来添加另一支笔: to draw-PDF set-current-plot "OVERALL FOOD DISTRIBUTION" create-temporary-plot-pen "normal" set-p

我正在为NetLogo中蜜蜂的食物交换编写一个简单的模型。我画了一个柱状图来显示蜜蜂在每个蜱虫的不同食物量的分布。现在我想在每次运行模型时绘制一条覆盖直方图的正态分布曲线,即一条符合直方图条的曲线。我用一支笔用这个命令绘制了我的直方图:
海龟的直方图[食物]
还编写了这样的函数来添加另一支笔:

to draw-PDF
  set-current-plot "OVERALL FOOD DISTRIBUTION"
  create-temporary-plot-pen "normal"
  set-plot-pen-color red
  plot-pen-down
  let distsd sqrt ( variance ([food] of turtles) )
  let distmean mean [food] of turtles
  let multconst Number_of_bees / distsd / sqrt(2 * pi)
  let expconst 2 * distsd ^ 2
  let b 0
  while [ b < Number_of_bees]
  [
    let f foodofeachbee b
    let exparg (- ((f - distmean) ^ 2)) / expconst
    let y multconst * exp(exparg)
    plotxy f  y ]
end
绘制PDF
设置当前绘图“总体食物分布”
创建临时绘图笔“正常”
将绘图笔设置为红色
把笔划下来
让我们区分sqrt(海龟的差异([食物])
我指的是海龟[食物]
让multconst蜜蜂数量/distsd/sqrt(2*pi)
设expconst 2*distsd^2
让b 0
而[b<蜜蜂的数量]
[
让f foodofeachbee b
设exparg(-((f-distmean)^2))/expconst
让y multconst*exp(exparg)
plotxy f y]
结束
foodofeachbee
是我单独定义的记者。但是运行这个,我得到了一个错误,说“你的模型太大,无法运行!”


有什么建议吗?

您必须针对特定变量等修改此代码,但这里有一个完整的模型,演示了如何执行我认为您需要的操作。将此代码复制到一个空白模型中,并使用笔创建一个名为Test的绘图,该笔具有海龟的
直方图[value],间隔为0.05。代码添加了第二支钢笔,pdf由变量的均值和方差构成,并根据海龟的数量进行调整

您正试图为每只蜜蜂构造一个值。pdf与单个蜜蜂无关,因此绘图程序可以完全忽略它们,除非提取均值和方差所需的值

turtles-own [value]

to testme
  clear-all
  create-turtles 100
  [ set value random-normal 0.5 0.1 ]
  plot-normalised
  reset-ticks
end

to plot-normalised
  let meanPlot mean [value] of turtles
  let varPlot variance [value] of turtles
  let mult (count turtles / 20)  / sqrt (2 * pi * varPlot)
  set-current-plot "Test"
  create-temporary-plot-pen "normal"
  set-plot-pen-color red
  plot-pen-down
  let stepper 0.025
  while [ stepper <= 1 ]
  [ plotxy stepper (mult * exp ( - ((stepper - meanPlot) ^ 2) / (2 * varPlot) ) )
    set stepper stepper + 0.05
  ]
end

欢迎使用StackOverFlow,请使用第二支绘图笔查看此图,您可以在同一绘图中绘制PDF。但是你的直方图不会正常化。谢谢你的回答,艾伦。我会按照你的建议画出概率分布图。但是你知道有什么函数可以使NetLogo中的直方图正常化吗?谢谢你完整的回答和所有的解释。这很有帮助。
let mymin min [value] of turtles
let mymax max [value] of turtles
let stepper mymin + 0.025
while [ stepper <= mymax ]
[ plotxy stepper (mult * exp ( - ((stepper - meanPlot) ^ 2) / (2 * varPlot) ) )
  set stepper stepper + 0.05
]