Я пытаюсь получить чищу работать аналогичны этот пример, но с сгруппированной гистограммой: http://bl.ocks.org/mbostock/1667367D3 чистки на сгруппированную гистограмме
Я действительно не имеет хорошее представление о том, как чистить работы (I убежища я не смог найти хорошие учебники), поэтому я немного не понимаю, что происходит. Я попытаюсь включить соответствующие биты кода ниже. Диаграмма отслеживает время для исправления сломанных сборок днем, а затем группируется по портфелю. Пока создаётся кисть, и пользователь может перемещать и перетаскивать ее, но штрихи в основной диаграмме перерисовываются странно, и ось x вообще не обновляется. Любая помощь, которую вы можете дать, будет очень признательна. Спасибо.
// x0 is the time scale on the X axis
var main_x0 = d3.scale.ordinal().rangeRoundBands([0, main_width-275], 0.2);
var mini_x0 = d3.scale.ordinal().rangeRoundBands([0, main_width-275], 0.2);
// x1 is the portfolio scale on the X axis
var main_x1 = d3.scale.ordinal();
var mini_x1 = d3.scale.ordinal();
// Define the X axis
var main_xAxis = d3.svg.axis()
.scale(main_x0)
.tickFormat(dateFormat)
.orient("bottom");
var mini_xAxis = d3.svg.axis()
.scale(mini_x0)
.tickFormat(dateFormat)
.orient("bottom");
После связывания данных ...
// define the axis domains
main_x0.domain(data.result.map(function(d) { return d.date; })
.sort(d3.ascending));
mini_x0.domain(data.result.map(function(d) { return d.date; })
.sort(d3.ascending));
main_x1.domain(data.result.map(function(d) { return d.portfolio; })
.sort(d3.ascending))
.rangeRoundBands([0, main_x0.rangeBand() ], 0);
mini_x1.domain(data.result.map(function(d) { return d.portfolio; })
.sort(d3.ascending))
.rangeRoundBands([0, main_x0.rangeBand() ], 0);
// Create brush for mini graph
var brush = d3.svg.brush()
.x(mini_x0)
.on("brush", brushed);
После добавления оси-х и т.д.
// Create the bars
var bar = main.selectAll(".bars")
.data(nested)
.enter().append("g")
.attr("class", function(d) { return d.key + "-group bar"; })
.attr("fill", function(d) { return color(d.key); });
bar.selectAll("rect").append("rect")
.data(function(d) { return d.values; })
.enter().append("rect")
.attr("class", function(d) { return d.portfolio; })
.attr("transform", function(d) { return "translate(" + main_x0(d.date) + ",0)"; })
.attr("width", function(d) { return main_x1.rangeBand(); })
.attr("x", function(d) { return main_x1(d.portfolio); })
.attr("y", function(d) { return main_y(d.buildFixTime); })
.attr("height", function(d) { return main_height - main_y(d.buildFixTime); });
Здесь функция кисти (пытается несколько различных вариантов) ...
function brushed() {
main_x1.domain(brush.empty() ? mini_x1.domain() : brush.extent());
//main.select("rect")
//.attr("x", function(d) { return d.values; })
//.attr("width", function(d) { return d.values; });
bar.select("rect")
.attr("width", function(d) { return main_x1.rangeBand(); })
.attr("x", function(d) { return main_x1(d.portfolio); });
//.attr("y", function(d) { console.log(d); return main_y(d.buildFixTime); })
//.attr("height", function(d) { return main_height - main_y(d.buildFixTime); });
main.select(".x.axis").call(main_xAxis);
}
Похоже, вы добавление элементов 'rect' внутри элементов' rect' - вам не нужно это делать. Кроме того, вы, вероятно, хотите «bar.selectAll (« rect »)' в вашей «матовой» функции. Похоже, вы обновляете домен для 'main_x1', а затем перерисовываете' main_xAxis', который использует другой масштаб. –
ОК, имеет смысл, но когда я меняю домен на main_x0, я получаю следующее сообщение об ошибке: Uncaught TypeError: Объект 113 не имеет метода 'getDay' – JamesE
Можете ли вы представить полный пример, демонстрирующий проблему, пожалуйста? –