У меня есть два разных набора данных, и я пытаюсь создать круговые диаграммы с первым набором, а затем прослушать событие и перейти ко второму набору.Как обновить круговую диаграмму с помощью d3.js
Я могу успешно создать круговые диаграммы из первого набора данных, используя этот код
var data = [[70, 30],[60, 40],[50, 50],[95, 5],[87, 13]];
progress.pie.vars.svg = d3.select(progress.pie.vars.pieEl).selectAll("svg")
.data(data)
.enter()
.append("svg")
.attr("width", 150)
.attr("height", 150)
.each(function(d) { this.currentAngles = d; }); // store the initial angles;
progress.pie.vars.path = progress.pie.vars.svg.selectAll("path")
.data(function(d, i){ return pie(d) })
.enter().append("path")
.attr("fill", function(d, i) { return color(i); })
.attr("transform", "translate(" + 75 + ", " + 75 + ")")
.attr("d", arc);
Примечание: Я использую жестко закодированные данные здесь, я могу повторить с помощью JSON, но я хотел бы упростить вещи просто так Я могу заставить переходы работать.
Это создает svg и отображает их на странице, но проблема возникает, когда я использую другой набор данных и пытаюсь обновить пути. Как это ...
var data = [[60, 40], [10, 10, 10, 70], [30, 70], [25, 25, 25, 25], [30, 35, 35]];
progress.pie.vars.svg = progress.pie.vars.svg.selectAll("svg")
.data(data);
progress.pie.vars.path = progress.pie.vars.path
.data(function(d, i){ return pie(d) })
.enter().append("path")
.transition()
.duration(5000);
Я исследовал общий шаблон обновления d3, но я пока не совсем понимаю его.
Если у кого есть какие-либо предложения, как решить мою проблему или улучшить свой код, то его очень высокую оценку :)
Благодаря
Спасибо за ответ, он прояснил несколько вещей. теперь все работает, но каждый раз, когда код будет перерисовывать все пути. Я хочу улучшить его, чтобы сделать что-то вроде этого http://bl.ocks.org/mbostock/5681842. Могу ли я вставить еще один код здесь, чтобы вы могли посмотреть? Единственная проблема, с которой я столкнулась, заключается в том, что круговые диаграммы по какой-то причине не переходят. –
Не уверен, что это ваша текущая проблема, но вам понадобится настраиваемая анимация для удобного интерполяции угла дуги. Проверьте пример arcTween() в примере, на который вы ссылаетесь. –
Дуга правильно интерполирует, но она просто не переходит. Здесь я храню углы, взятые из примера, с которым я связан. '.attrTween ("d", progress.pie.tweenPie)' ' .each (функция (d) {this._current = d;});' –