Исправить распределение чисел после масштабирования диапазона - PullRequest
0 голосов
/ 03 мая 2020

Я не уверен, что это то, что называется "распределением", поэтому, пожалуйста, прокомментируйте, если это математически. У меня есть список чисел, которые требуют повторного масштабирования, чтобы полностью заполнить мою столбчатую диаграмму:

const list = [[1, 8, 3, 9], [10, 2, 7, 6]]

Диапазон каждого значения 1..10, и вот как я их масштабирую:

const scaled = list.map(values => values.map(value => 10 / value))

Но это полностью исключает распределение, и столбцы не полностью заполняют всю доступную ширину до 100%. Опять же не уверен, что речь идет о «распределении», поэтому я приму совет. Каждый набор принадлежит одному столбцу с накоплением, и общее значение должно добавить до 10, в то время как большие значения сохраняют большие визуальные эффекты на дисплее.

Редактировать Как это выглядит сейчас , с вышеупомянутым методом "масштабирования", но мне нужен каждый бар, чтобы заполнить ширину.

1 Ответ

0 голосов
/ 03 мая 2020

Вам необходимо нормализовать ваши записи, чтобы суммировать до одного и того же числа. Вы можете разделить каждую запись на сумму всего набора и умножить на желаемую сумму:

function normalizeDistribution(entries, max) {
    const sum = entries.reduce((sum, entry) => sum + entry);
    return entries.map(n => n / sum * max);
}

И вот как вы ее используете:

const list = [[1, 8, 3, 9], [10, 2, 7, 6]];
const max = 10;
const normalizedList = list.map(entries => normalizeDistribution(entries, max));

/*

result:
[
    [0.47619047619047616, 3.8095238095238093, 1.4285714285714284, 4.285714285714286],
    [4, 0.8, 2.8000000000000003, 2.4]
]

*/

Теперь вы можете передать normalizedList к вашему графику, и он будет генерировать бары полной ширины.

...