Я создал строку Chart и хочу изменить интерполяцию каждой строки. Здесь я нашел источник с различными интерполяциями: https://www.dashingd3js.com/svg-paths-and-d3jsd3.js linechart различные интерполяции для разных строк
Выполнение этого для строки, содержащей только одну строку: Работает отлично! Для диаграммы с разные линии с различными интерполяциями: не получите.
var chart;
nv.addGraph(function() {
chart = nv.models.lineChart()
.options({
margin: {left: 100, bottom: 100},
x: function(d,i) { return i},
showXAxis: true,
showYAxis: true,
transitionDuration: 250
})
;
chart.yAxis
.axisLabel('y axis')
.tickFormat(d3.format(''))
.axisLabelDistance(50);
d3.select('#chart1 svg')
.datum(dataForChart)
.call(chart);
nv.utils.windowResize(chart.update);
chart.dispatch.on('stateChange', function(e) { nv.log('New State:', JSON.stringify(e)); });
return chart;
});
var dataForChart=function(){
var section1 = new Array();
section1.key="Section 1";
section1.values = new Array();
section1.color="#1F77B4";
section1.interpolate='basis';
var section2 = new Array();
section2.key="Section2";
section2.values = new Array();
section2.color="#2CA02C";
section2.interpolate='step-before';
for (i=0;i<12;i++){
date=new Date(2013,i,1);
section1.values[i] = {"y" : Math.round(2*i*getRandom(1,2)), "x": i*3};
section2.values[i] = {"y" : Math.round(6*i+2*getRandom(1,2)), "x": i/1.5};
}
function getRandom(min, max)
{
return Math.random() * (max - min + 1) + min;
}
var dataArray=new Array();
dataArray.push(section1); //Commenting out section1 or section2 makes it work
dataArray.push(section2);
return dataArray;
};
, комментируя раздел1 или раздел2 в конце источника, заставляет его работать. Затем появляется одна строка с указанной интерполяцией.
Это не возможно, с NVD3; функции NVD3 просто передают любое значение, которое вы указали для «интерполяции» в ['d3.svg.line.interpolate()'] (https://github.com/mbostock/d3/wiki/SVG-Shapes#wiki-line_interpolate), который принимает только строку, а не функцию на основе данных. Могу я спросить * почему * вы хотите, чтобы на одном графике были разные стили линии? Это кажется мне плохим выбором дизайна. – AmeliaBR
Я просто хотел сделать это для демонстрации. Но это нормально, если он не работает. Но мне нужно решить, какая интерполяция используется в массиве ввода данных. Но это также не работает, например, @AmeliaBR говорит, что он не принимает функции? –
Вы всегда можете написать свою собственную функцию, которая обращается к массиву данных, чтобы определить, какой тип интерполяции использовать. Но вы можете использовать только один тип интерполяции в каждом графике, если вы не измените код NVD3. Для демонстрации, возможно, создайте вкладку выбора радио-кнопок/списка, которая позволяет пользователям выбирать этот параметр, а затем устанавливает параметр chart.interpolate (опция); chart.update(); 'для переключения режима. – AmeliaBR