Скрыть точки данных в точечной диаграмме nvd3.js по форме
Я успешно построил точечную диаграмму с несколькими сериями в nvd3.js. nvd3.js предоставляет механизмы для включения / выключения рядов, определенных "ключом" в моих данных. Можно ли сделать то же самое с помощью назначенных фигур (например, крест, круг и т. Д.)? Я могу выбрать все точки данных со сложной формой:
var series = d3.selectAll('.nv-series')
.data();
for (var i = 0; i < series.length; i++) {
var values = series[i].values;
for (var j = 0; j < values.length; j++) {
if (values[j].shape=='circle') {
// Do something with
}
}
}
Но теперь я не хочу переключать их. Свойство "отключено" работает только для рядов, а не для отдельных точек данных. Мне нужно что-то подобное здесь, так что график будет актуализирован с правильным выравниванием после сокрытия точек данных. Любая помощь приветствуется, потому что я абсолютно не эксперт по javascript и не могу ничего найти в сети даже после долгих исследований.
2 ответа
Я сделал это сейчас с помощью обходного решения (сохранив две структуры данных, allData и FilterData и отфильтровав клонированную версию allData):
//clone data
filteredData = jQuery.extend(true, {}, allData);
for (var i = 0; i < filteredData.length; i++) {
var values = filteredData[i].values;
for (var j = 0; j < values.length; j++) {
if (values[j].shape!=shape) {
filteredData[i].values.splice(j,1);
j--;
}
}
}
d3.select('#test1 svg').datum(filteredData);
chart.update();
Делая это таким образом, весь график обновляется. На консоли выдается несколько ошибок, но, за исключением некоторых мелких проблем с рендерингом, похоже, что это работает
Ты можешь использовать filter
выделите нужные элементы (вместо зацикливания), а затем используйте css, чтобы скрыть фигуры, которые вы хотите скрыть.
d3.selectAll('.nv-point').filter(function(d){ return d.shape === 'circle' })
.classed('hidden-point', true);
В этом примере hidden-point
класс будет содержать visibility: none
или некоторый подобный стиль, который скрывает пункты с этим классом. d3.selectAll('.hidden-point').classed('hidden-point', false)
покажет все скрытые точки.