Легенды визуализируются, когда их диаграммы перерисовываются, но проблема в том, что легенда берется из данных, а crossfilter не автоматически удаляет пустые группы.
Было бы здорово, если бы легенды были типом диаграммы, поэтому мы могли бы просто использовать поддельную группу (преобразование данных «a.k.a.»). Но нет, нам нужно обновить .legendables()
отфильтровать пустые контейнеры:
dc.override(pieactChart, 'legendables', function() {
var legendables = this._legendables();
return legendables.filter(function(l) {
return l.data > 0;
});
});
вилка вашей скрипки: http://jsfiddle.net/gordonwoodhull/13t804u6/5/
Примечание: это только изменяет один (левый) график, вы должны скопировать/вставьте его для каждой диаграммы (или оберните ее в функцию), чтобы применить ее к другим диаграммам.
[Я очень упрям в связи с тем, что не хочу, чтобы такие данные были фильтрованы внутри диаграмм, поэтому я не собираюсь предлагать это как функцию. Вместо этого, легенда должна быть диаграммой, которая берет свои данные с другой диаграммы, и должен быть способ преобразовать эти данные.]
Похоже, что легенда должна забрать только закрытые срезы при ее рендеринге, но это не так. У меня есть логика обновления/перерисовки, поэтому она не будет отвечать на фильтры. Вы можете попробовать вручную вызвать legend.render при изменении фильтра? – Gordon
Простите, Гордон, как бы я это сделал? Есть ли у вас какие-нибудь примеры, на которые я мог бы обратить внимание, это укажет на меня в правильном направлении? Большое спасибо. – NorthSide
все в порядке, похоже, что я был неправ здесь, легенды действительно переизлучаются, когда диаграмма перерисовывается. удаление моего предыдущего ответа и создание нового. – Gordon