Гистограмма в JavaScript?

У меня есть этот набор данных для дохода:

Доход Количество человек
0 245981
8,8 150444
30 126063
49,9 123519
70 115029
90,7 277149
109,1 355768
130 324246
150,3 353239
170,2 396008
190 396725
210 398640
230,1 401932
250 416079
270 412727
289,8 385192
309,7 343178
329,7 293707
349,6 239982
369,7 201557
389,3 165132
442,3 442075
543,4 196526
679,9 146784
883,9 48600
1555 44644

(Как видите, ширина между уровнями доходов к концу увеличивается.)

  1. Как мне составить точную гистограмму этих данных в JavaScript? (По линейной шкале оси X с диапазоном, например, от 0 до 2000)
  2. Как определить количество людей, показывающих только проценты с разными интервалами?
  3. Если я хочу разместить ровно 100 символов, представляющих данные, как мне решить, где их разместить?

2 ответа

Решение

Существующие примеры гистограмм основаны на вычислении гистограммы из выборок, скажем, если у вас был список отдельных людей и их доходов. В этом случае у вас уже есть данные для гистограммы - вы просто хотите отобразить их.

Сложность в том, что ваша гистограмма имеет ячейки переменной ширины. Первое, что вы можете сделать, это игнорировать переменную ширину каждой корзины и просто отобразить простую диаграмму леденцов. Ось X- это линейная шкала дохода, а ось Y- линейная шкала количества людей:

http://bl.ocks.org/1624656

Если вы хотите преобразовать это в гистограмму, вы не можете просто заменить эти строки фиксированной ширины полосами переменной ширины; вам нужно нормализовать данные так, чтобы область бара кодировала частоту людей с таким доходом. Следовательно, ширина бара - это диапазон дохода (например, от 0 до 8,8 для первого контейнера), а высота бара - это количество людей, деленное на ширину. В результате площадь (ширина × высота) пропорциональна количеству людей. Это выглядит так:

http://bl.ocks.org/1624660

Если вы просто хотите или вам нужно отсортировать данные в бункеры, без печати посмотрите на histogram.js.

Другие вопросы по тегам