Так что я относительно новичок в D3, но мне не удалось снять эту проблему на несколько дней, не повезло. Удивление, если я делаю ошибку новичков.D3 Обновление гистограммы
Я пытаюсь создать график, который представляет объем vs. время, и позволяет пользователю обновлять график с другим диапазоном дат.
function updateVolumeGraph(data, div) {
//Get the data again
data.forEach(function(d) {
d.startTime = new Date(d.startTime);
d.totalVolume = d.totalVolume;
});
//Scale the range of the data again
x.domain(d3.extent(data, function(d) { return d.startTime;}));
y.domain([0, d3.max(data, function(d) { return d.totalVolume; })]);
//Select the section we want to apply our changes to
var graphElement = d3.select(div).transition();
var bars = graphElement.selectAll(".bar").data(data); <<< Undefined
//Add some bars
bars.enter().append("rect")
.attr("class", "bar")
.attr("x", function(d) { return x(d.startTime); })
.attr("y", function(d) { return y(d.totalVolume); })
.attr("height", function(d) { return height - y(d.totalVolume); })
.attr("width", barWidth);
svg.select(".x.axis") // change the x axis
.duration(750)
.call(xAxisVolume);
svg.select(".y.axis") // change the y axis
.duration(750)
.call(yAxisVolume);
};
Моя проблема возникает в том месте, где я отметил его как «Неопределенный». graphElement.selectAll (". bars") возвращает массив «rects», но вызов .data (data) не определен.
Любой совет, который вы могли бы предложить, был бы очень благодарен!
'graphElement' - это выбор, возвращенный из вызова' .transition() '. Я не уверен, что «перешедший» выбор может выполнять привязку '.data()'. Попробуйте изменить его на 'var graphElement = d3.select (div)' (т. Е. Нет '.transition()') и посмотреть, не изменит ли это что-то. – meetamit