К сожалению, "гистограмма с порядковыми данными" по определению невозможна. Вместо этого вам нужна гистограмма . Цитируя статью Википедии о гистограмме,
Гистограмма - точное представление распределения числовых данных. Это оценка распределения вероятности непрерывной переменной , впервые введенная Карлом Пирсоном.
Акцент на непрерывную переменную принадлежит мне.
Если вы посмотрите на d3.histogram
исходный код (теперь переименован в d3.bin
), вы увидите, что он ожидает числовые значения:
// Assign data to bins by value, ignoring any outside the domain.
for (i = 0; i < n; ++i) {
x = values[i];
if (x0 <= x && x <= x1) {
bins[bisect(tz, x, 0, m)].push(data[i]);
}
}
Имеетвзгляните конкретно на x0 <= x && x <= x1
.
Я вижу, что вы написали "Я не хочу использовать гистограмму, вся причина этого эксперимента - научиться использовать гистограмму d3" . В этом случае выберите правильные данные , то есть набор данных с непрерывной переменной.
Решение для гистограммы:
Все, что говорится, канаваэтот генератор гистограмм и создать старый добрый гистограммы. Для этого все, что вам нужно, это манипулировать данными тура. Например, давайте используем Array.prototype.reduce
для создания массива объектов, с colour
и count
.
Предположим, этот массив данных:
const colors = ['red', 'green', 'blue', 'red', 'red', 'green', 'yellow', 'pink', 'red', 'green', 'yellow', 'pink', 'pink', 'green', 'blue', 'green', 'blue', 'green', 'green', 'green', 'green'];
Мы можем манипулировать этим так:
const colors = [
'red',
'green',
'blue',
'red',
'red',
'green',
'yellow',
'pink',
'red',
'green',
'yellow',
'pink',
'pink',
'green',
'blue',
'green',
'blue',
'green',
'green',
'green',
'green'
];
const data = colors.reduce((acc, curr) => {
const foundObject = acc.find(e => e.colour === curr);
if (foundObject) ++foundObject.count;
else acc.push({
colour: curr,
count: 1
});
return acc;
}, []);
console.log(data)
Теперь вы можете использовать этот массив данных для создания гистограммы с colours
в качестве категориальной переменной на оси x
и count
в качестве количественнойпеременная по оси y
.