Я создаю интерактивную гистограмму в D3. При нажатии кнопки данные изменяются.D3 обновление данных, но не ось
Вот упрощенный код гистограмме:
<svg class="cex"></svg>
<script>
var margin = {top: 20, right: 20, bottom: 60, left: 35},
width = 650 - margin.left - margin.right,
height = 300- margin.top - margin.bottom;
var x = d3.scale.ordinal()
.rangeRoundBands([0, width], .2);
var y = d3.scale.linear()
.range([height, 0]);
var xAxis = d3.svg.axis()
.scale(x)
.orient("bottom");
var yAxis = d3.svg.axis()
.scale(y)
.outerTickSize(0)
.orient("left");
var cex = d3.select(".cex")
.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom)
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
d3.csv("/input.csv", function(error, data) {
x.domain(data.map(function(d) { return d.City; }));
y.domain([0, d3.max(data, function(d) { return d.EatIn; })]);
cex.append("g")
.attr("class", "x axis")
.attr("transform", "translate(0," + height + ")")
.call(xAxis)
.selectAll("text")
.attr("y", 0)
.attr("x", 9)
.attr("dy", ".35em")
.attr("transform", "rotate(60)")
.style("text-anchor", "start");;
cex.append("g")
.attr("class", "y axis")
.call(yAxis);
var bar=cex.selectAll(".bar")
.data(data)
.enter()
.append("rect")
.attr("class", "bar")
.attr("x", function(d) { return x(d.City); })
.attr("y", function(d) { return y(d.EatIn); })
.attr("height", function(d) { return height - y(d.EatIn); })
.attr("width", x.rangeBand());
});
function type(d) {
d.EatIn = +d.EatIn;
return d;
}
Когда кнопка выбрана следующий код обновления выполняется:
function EatOutData() {
d3.csv("/input.csv", function(error, data) {
x.domain(data.map(function(d) { return d.City; }));
y.domain([0, d3.max(data, function(d) { return d.EatOut; })]);
var sel = cex.selectAll("rect")
.data(data);
sel.exit().remove();
sel.enter().append("rect")
sel.attr("class", "bar")
sel.attr("x", function(d) { return x(d.City); })
sel.attr("y", function(d) { return y(d.EatOut); })
sel.attr("height", function(d) { return height - y(d.EatOut); })
sel.attr("width", x.rangeBand());
sel.selectAll("g.y.axis")
.call(yAxis);
sel.selectAll("g.x.axis")
.call(xAxis);
function type(d) {
d.EatOut = +d.EatOut;
return d;
}
}
)};
Обновление изменяет переменную Y. Таким образом, высота штанги изменяется, но ось не изменяется, а масштаб двух переменных сильно отличается.
На этом было несколько других сообщений СО, но никто, казалось, не исправил это для меня. Я не уверен, почему y.domain в обновлении не настраивает их. Был бы действительно признателен за любые предложения.
что есть в input.csv? отправьте свои данные образца – somename
Вам нужно будет увидеть ваш файл csv и формат данных, чтобы проверить, действительно ли d3.max изменяется при обновлении данных. Разве это сообщение? Тем временем вы также можете проверить [this] (http://stackoverflow.com/questions/21017214/d3-js-max-and-min-value-from-json-data-which-has-array-of-values) сообщение чтобы узнать, соответствует ли он вашему счету – Aditya
. Здесь вы можете найти данные - https://raw.githubusercontent.com/katerabinowitz/CEX-Cities/master/MSA-CEX-prop.csv - отметить разницу в масштабах ч/б EatIn и алкоголь. Я не думаю, что это максимальная проблема bc, если я строю оба графика независимо, весы подходят для каждого. – RetaK