Search code examples
javascriptjquerychartscanvasjs

canvasJS chart not rendering properly


I'm trying to render multi line chart using canvasJS but it's not working as expected.

Here is my drawChart function

function drawChart(obj, placeholder){
var dataPoints = [];
var maxPrice = [];
var minPrice = [];
//console.info(obj);
for (var i = obj.length - 1; i >= 0; i--) {
    dataPoints.push({label:obj[i].year+"-"+obj[i].month+"-"+obj[i].day,y:Math.round(obj[i].avgPrice * 1000) / 1000});
    minPrice.push({label:obj[i].year+"-"+obj[i].month+"-"+obj[i].day,y:obj[i].minPrice});
    maxPrice.push({label:obj[i].year+"-"+obj[i].month+"-"+obj[i].day,y:obj[i].maxPrice});
}
console.log(dataPoints);
console.log(maxPrice);
console.log(minPrice);
var chart = new CanvasJS.Chart("chartContainer",
{
    animationEnabled: true,
    //theme: "theme1",
    zoomEnabled: true,
    title:{
        text: placeholder
    },
    data: [
        {
            type: "spline",  //change type to bar, line, area, pie, etc
            showInLegend: true,
            legendText: "Average Price", 
            dataPoints: dataPoints    //this line I tried to change
        },
        {
            type: "spline",  
            showInLegend: true,
            legendText: "Min Price", 
            dataPoints: minPrice
        },
        {
            type: "spline",  
            showInLegend: true,
            legendText: "Max Price", 
            dataPoints: maxPrice
        }
    ],
    legend: {
        cursor: "pointer",
        itemclick: function (e) {
            if (typeof(e.dataSeries.visible) === "undefined" || e.dataSeries.visible) {
                e.dataSeries.visible = false;
            } else {
                e.dataSeries.visible = true;
        }
        chart.render();
        }
    }
});

chart.render();

}

var dataPoints, maxPrice, minPrice has same layout/data.

look here.enter image description here

it's displaying chart like this, reset of two lines minPrice and maxPrice are vanished.

enter image description here

PS If I change dataPoints: dataPoints to dataPoints: min/maxPrice it doesn't work either that way.


Solution

  • I got the solution, I'm posting so it could be helpful for someone else.

    I suspected that if you're trying to render chart dynamically, then for y-axis you need to use Math function to make it work.

    So I changed these

    dataPoints.push({label:obj[i].year+"-"+obj[i].month+"-"+obj[i].day,y:Math.round(obj[i].avgPrice * 1000) / 1000});
    minPrice.push({label:obj[i].year+"-"+obj[i].month+"-"+obj[i].day,y:obj[i].minPrice});
    maxPrice.push({label:obj[i].year+"-"+obj[i].month+"-"+obj[i].day,y:obj[i].maxPrice});
    

    To

    dataPoints.push({label:obj[i].year+"-"+obj[i].month+"-"+obj[i].day,y:Math.round(obj[i].avgPrice * 1000) / 1000});
    minPrice.push({label:obj[i].year+"-"+obj[i].month+"-"+obj[i].day,y:Math.round(obj[i].minPrice * 1000) / 1000});
    maxPrice.push({label:obj[i].year+"-"+obj[i].month+"-"+obj[i].day,y:Math.round(obj[i].maxPrice * 1000) / 1000});
    

    and now it's working fine, may be this could be a bug in canvasjs or may be I was messing somewhere.

    Look hereenter image description here