Nvd3 / d3.js одна гистограмма поверх другой

У меня есть две серии, максимальная и средняя, ​​каждая из которых содержит значение для всех дней месяца. В нашем программном обеспечении для настольных ПК мы отображали их на гистограмме, где средний ряд накладывается на максимальный ряд. Поскольку среднее значение никогда не может быть больше максимума, нет проблем со скрытыми полосами.

В NVD3 я нашел только варианты группировки или складывания полос. Группировка занимает слишком много места. При наложении на другую сторону будут отображаться неправильные значения для верхних полос. Только если обе полосы начинаются с нижней оси, их фактические значения могут быть считаны с оси y.

Можно ли это каким-либо образом сделать в NVD3?

Если не непосредственно в NVD3, можно ли это сделать путем доступа к базовым объектам d3?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
223
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это один из способов сделать это. Вы можете использовать multibarChart и включить только опцию стека и отключить элементы управления, которые отображаются по умолчанию.

По моему личному мнению, я бы посоветовал использовать собственный D3 в зависимости от того, чего вы пытаетесь достичь.

var chart = nv.models.multiBarChart().stacked(true).showControls(false);
d3.select('#chart svg').datum([
  {
    key: "Avg",
    color: "#51A351",
    values:
    [      
      { x : "Jan 1", y : 40 },
      { x : "Jan 2", y : 30 },
    ]
  },
  {
    key: "Max",
    color: "#BD362F",
    values:
    [      
      { x : "Jan 1", y : 12 },
      { x : "Jan 2", y : 8 },
    ]
  }
]).transition().duration(500).call(chart);
<script src = "https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/nvd3/1.8.1/nv.d3.min.js"></script>
<link rel = "stylesheet" type = "text/css" href = "https://cdnjs.cloudflare.com/ajax/libs/nvd3/1.8.1/nv.d3.min.css">

<div id = "chart" style = "height: 200px;"><svg></svg></div>

Спасибо, но я не понимаю, как это решает проблему. Во-первых, в данных вашего примера упускается тот факт, что максимум всегда выше среднего. Но на самом деле проблема в том, что максимум для 1 января, например, отображается как 52 вместо 12, потому что столбцы уложены друг на друга. Я хочу, чтобы они были наложены, чтобы каждое значение столбца можно было правильно считывать с оси y.

NicolasR 30.05.2018 01:27

Я пытался заставить его работать, вычитая среднее значение из максимума перед его отображением, но затем всплывающие подсказки отображают неправильное значение.

NicolasR 30.05.2018 01:30

@NicolasR, есть способ иметь собственный рендерер для всплывающей подсказки, см. Здесь - stackoverflow.com/questions/12416508/…. Кроме того, как я уже сказал, NVD3 не так гибок, как другие оболочки / фреймворки на основе d3 и нативные. Так что решение должно быть «взломанным».

sparta93 30.05.2018 01:50

хорошо, в сочетании с настраиваемой всплывающей подсказкой он должен работать. На самом деле я готов перейти на чистый d3, но для первых предварительных версий я подумал, что было бы неплохо использовать nvd3.

NicolasR 30.05.2018 02:13

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