DC.js - Составные диаграммы - Доступ к номеру стека в рендлете и проблема с линиями сетки - PullRequest
0 голосов
/ 17 сентября 2018

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

Это группировка для столбчатой ​​диаграммы с накоплением:

var XDimension = ndx.dimension(function(d) {
    return d.no;
  });

  var YDimension = XDimension.group().reduce(
    function reduceAdd(p, d) {
      ++p.count;
      p.bottom += +d.bottom;
      p.top += +d.top;
      p.extra += +d.extra;
      p.avg = p.bottom ? (p.top / p.bottom) : 0;
      p[d.sub_no] = (p[d.sub_no] || 0) + p.bottom ? (p.top / p.bottom) : 0;

      return p;
    },
    function reduceRemove(p, d) {
      --p.count;
      p.bottom -= +d.bottom;
      p.top -= +d.top;
      p.extra -= +d.extra;
      p.avg = p.bottom ? (p.top / p.bottom) : 0;
      p[d.sub_no] = (p[d.sub_no] || 0) - p.bottom ? (p.top / p.bottom) : 0;

      return p;
    },
    function reduceInitial() {
      return {
        count: 0,
        bottom: 0,
        top: 0,
        extra: 0,
        avg: 0
      };
    });

Чтобы получить доступ к этим значениям в renderlet, я использую d.data.key, dy, d.data.value.top и т. д. Вот фрагмент кода:

stacks.on('renderlet', function(chart) {
    chart.selectAll('g.x text')
      .attr('transform', 'translate(-10,10) rotate(315)')
    chart.selectAll('rect')
      .on("mouseover", function(d) {
        d3.select(this)
          .transition()
          .duration(500)
        div.transition()
          .duration(200)
          .style("opacity", 0.9);
        div.html("<table><thead><tr><th colspan='2' class='toolHead'>" + d.data.key + ' [' + d.data.value[this] + '] ' +
            '</th></tr></thead><tbody> <tr style="margin-top: 100px"><td class="toolHeadCol"><b>' + 'Value: ' +
            '</b></td> <td>' + numberFormat(d.y) + '</td></tr>' + '<tr style="margin-top: 100px"><td class="toolHeadCol"><b>' + 'Extra: ' + '</b></td> <td>' + numberFormat(d.data.value.extra) + '</td></tr>' + '<tr style="margin-top: 100px"><td class="toolHeadCol"><b>' + 'Top: ' + '</b></td> <td>' + numberFormat(d.data.value.top) + '</td></tr>' + '</tbody></table>')
          .style("left", (d3.event.pageX) + "px")
          .style("top", (d3.event.pageY - 28) + "px");
      })
      .on("mouseout", function() {
        d3.select(this)
          .transition()
          .duration(500)
        div.transition()
          .duration(500)
          .style("opacity", 0)
      })

Но я не могу получить номер стека при наведении мыши.

Каков эквивалентный код d3.js для доступа к номеру стека в гистограмме с накоплением внутри 'renderlet?

для этой же скрипки.


Редактировать

Я столкнулся с еще одной проблемой, в серии графиков.Я использую ту же логику в диаграмме серии для всплывающей подсказки.вместо 'rect' я использую 'circle', поэтому при наведении на определенную точку данных в строке отображается всплывающая подсказка.Круг действует, как и ожидалось, но есть некоторые проблемы с соответствующими горизонтальными и вертикальными линиями сетки.

  1. Они не исчезают при наведении мыши и остаются до тех пор, пока не появится другой круг.
  2. Так как егов последовательном графике имеется несколько строк, и при наведении курсора на точку данных в одной строке, похоже, не влияет наведение мыши в другой строке.Как показано на изображении ниже:

enter image description here

Как показано на рисунке, линия сетки на синей линии остается видимой, даже когда она находится вверхуна оранжевой линии.

Как это исправить?

Вот обновленная скрипка

1 Ответ

0 голосов
/ 18 сентября 2018

Просмотр привязанных данных к rect d.layer равен номеру стека группы.

...