Netlogo图直方图百分比

时间:2018-06-30 01:58:09

标签: netlogo

我试图在NetLogo中创建一个直方图,以显示列表中每个唯一值的百分比而不是频率。假设我们有一个列表[1 1 2 5],因此直方图应具有对应于以下几点的3条:

Bar1-->(x:1, y:0.5)
Bar2-->(x:2, y:0.25)
Bar3-->(x:5, y:0.25)

1 个答案:

答案 0 :(得分:2)

我想认为,最简单的方法可能是利用NetLogo中的plotxy函数。使用此设置:

globals [ example_list ]

to setup
  ca
  set example_list [ 1 1 2 5 ]
  reset-ticks
end

使用to-report获取列表中项目的频率:

to-report freq [ i_ list_ ]
  report length filter [ ind -> ind = i_ ] list_
end

然后使用to-report来查找传递的每个唯一值的比例,并输出与该唯一值配对的值(注释中有更多详细信息):

to-report freq_map [ list_ ]
  ; get length of input list
  let len length list_

  ; get unique values for the input list
  let uniques remove-duplicates list_

  ; get counts of each unique value
  let counts map [ i -> freq i list_ ] uniques

  ; report an xy pair for each unique value / proportion
  report ( map [ [ x y ] -> list x ( y / len ) ] uniques counts )
end

现在,您可以将列表传递给freq_map,它将输出xy对列表的列表:

observer> show freq_map [ 1 1 2 5 ]
observer: [[1 0.5] [2 0.25] [5 0.25]]

您现在可以设置情节。如果您对其中每一对使用foreachplotxy,例如:

enter image description here

只要您使用X maxY max设置正确缩放比例,您的绘图就会看起来像这样:

enter image description here