我试图在NetLogo中创建一个直方图,以显示列表中每个唯一值的百分比而不是频率。假设我们有一个列表[1 1 2 5]
,因此直方图应具有对应于以下几点的3条:
Bar1-->(x:1, y:0.5)
Bar2-->(x:2, y:0.25)
Bar3-->(x:5, y:0.25)
答案 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]]
您现在可以设置情节。如果您对其中每一对使用foreach
至plotxy
,例如:
只要您使用X max
和Y max
设置正确缩放比例,您的绘图就会看起来像这样: