dc.js (версия 3.0.7) - невозможно построить rangeChart («focusChart» с неопределенной ошибкой) - PullRequest
1 голос
/ 09 мая 2019

У меня проблемы с построением RangeChart для моей lineChart.

d3.tsv("demo.tsv").then(function(someData) {
    drawMarkerSelectsome(someData);
});

function drawMarkerSelectsome(someData) {

parseDate = d3.timeParse("%m/%d/%Y");
    someData.forEach(function(d) {
    d.dd = parseDate(d.txndatetime);
    d.month = d3.timeFormat("%m")
});

xf = crossfilter(someData);
all = xf.groupAll();

// Dimension by full date
dateDim = xf.dimension(function(d) { return d.dd; });

// Dimension by month
moveMonths = xf.dimension(function (d) {
    return d.month;
});

numRecordsByDate = dateDim.group().reduceCount();;
numRecordsByMonth = moveMonths.group().reduceCount();

minDate = dateDim.bottom(1)[0].dd;
maxDate = dateDim.top(1)[0].dd;

timeChart = dc.lineChart("#time-chart",groupname)
.renderArea(true)
.width(940)
.height(200)
.transitionDuration(3000)
.margins({top: 10, right: 50, bottom: 20, left: 40})
.dimension(dateDim)
.mouseZoomable(true)
.rangeChart(volumeChart)
.elasticY(true)
.renderHorizontalGridLines(true)
.renderVerticalGridLines(true)
.brushOn(false)
.group(numRecordsByDate)
.x(d3.scaleTime().domain([minDate, maxDate]))
.round(d3.time.day.round)
.xUnits(d3.time.days)
.elasticY(true);

volumeChart.width(940)
.height(60)
.margins({top: 5, right: 50, bottom: 20, left: 40})
.dimension(dateDim)
.group(numRecordsByMonth)
.centerBar(true)
.gap(1)
.alwaysUseRounding(true)
.colors(['#D62728'])
.x(d3.scaleTime().domain([minDate, maxDate]))
.round(d3.time.month.round)
.xUnits(d3.time.months);

Я пытался сохранить размерность (dateDim) и изменил группу, как обсуждалось здесь ( dc.js - бары rangeChart исчезают при фильтрации ), но я получаю следующую ошибку.

enter image description here

Не уверен, что не так с кодом. Я использую dc.js v.3.0.7 и d3.js v.5.7.0.

1 Ответ

1 голос
/ 09 мая 2019

Ошибка говорит о том, что volumeChart не определено. Вы не показываете, где он инициализирован, но я предполагаю, что это не так.

Вы должны создать экземпляр lineChart или barChart в volumeChart перед вызовом .rangeChart(volumeChart)

Вы можете установить его параметры после настройки timeChart, если хотите.

...