Процент гистограммы графиков Netlogo - PullRequest
0 голосов
/ 30 июня 2018

Я пытаюсь создать гистограмму в 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 голосов
/ 30 июня 2018

Для создания барплота, я думаю, самый простой способ - использовать функцию 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 для каждой из этих пар, например:

enter image description here

Ваш график будет выглядеть примерно так, если вы правильно масштабируете его с настройками X max и Y max:

enter image description here

...