Как применить горизонтальный разрыв к гистограмме d3.js
Я использую Rickshaw (основанный на d3.js) для построения уложенных гистограмм. Проблема в том, что первый бар обычно намного выше, чем другие, что приводит к нарушению визуальной обратной связи.
![bar chart with bad proportions]()
Использование логарифмической шкалы (я думаю) не вариант здесь, потому что тогда пропорции между стеками в баре будут сломаны. Я хотел представить горизонтальный разрыв, как на следующем изображении:
![Bar chart with horizontal break]()
Однако я не могу найти какую-либо особенность Rickshaw или d3.js, чтобы сделать что-то вроде этого. Любые предложения о том, как их сделать?
Ответы
Ответ 1
Для этого потребуется довольно много дополнительной работы. Вот схема того, что вам нужно будет делать.
- Создайте две шкалы: одну для нижней и одну для верхней. Установите соответствующие домены и диапазоны.
- Передать значения в более низкую шкалу, укорачивая их при максимальном значении домена, так что более длинные полосы достигают максимума.
- Передать значения в верхнюю шкалу, фильтруя те, которые ниже минимального.
Вам в основном нужно создать два графика, которые выровнены друг с другом, чтобы создать впечатление, что есть только один. Если вы это помните, делать это не должно быть слишком сложно.
Здесь приведено быстрое и грязное доказательство концепции, в котором используется линейная шкала .clamp(true)
, чтобы предотвратить слишком большие значения баров для значений вне домен.
Ответ 2
компонент d3fc-прерывистый масштаб адаптирует любой другой масштаб (например, линейный масштаб d3) и добавляет понятие разрывов. Эти разрывы определяются с помощью "поставщика прерывания", который может быть использован для создания одного или нескольких "зазоров" в масштабе.
Например, чтобы удалить диапазон, вы можете построить масштаб следующим образом:
var scale = scaleDiscontinuous(scaleLinear())
.discontinuityProvider(discontinuityRange([50, 75]))
Вот полный пример, который показывает, как использовать это, чтобы создать "разрыв" в масштабе, чтобы отображать значения, имеющие большие пробелы в их общем диапазоне.
https://bl.ocks.org/ColinEberhardt/b60919a17c0b14d745c881f48effe681