Для создания барплота, я думаю, самый простой способ - использовать функцию plotxy
в NetLogo. С этой настройкой:
globals [ example_list ]
to setup
ca
set example_list [ 1 1 2 5 ]
reset-ticks
end
A 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
: