можно ли игнорировать значения 0 при создании графика в dygraph

<html>
<head>
<script type="text/javascript"
  src="dygraph-combined.js"></script>
</head>
<body>
<div id="graphdiv"></div>
<script type="text/javascript">
  g = new Dygraph(

    // containing div
    document.getElementById("graphdiv"),

    // CSV or path to a CSV file.
    "Date,Duration,Error\n" +
    "2008-05-07,75,23\n" +
    "2008-05-08,70,45\n" +
    "2008-05-09,70,0\n" +
    "2008-05-10,70,23\n" +
    "2008-05-11,70,11\n" +
    "2008-05-12,70,\n" +
    "2008-05-13,80,33\n",
     {
        // options go here. See http://dygraphs.com/options.html
        legend: 'always',
        animatedZooms: true,
        title: 'dygraphs chart template',
    includeZero: false
     }
  );
</script>
</body>
</html>

Возможно ли, чтобы график игнорировал нулевые или нулевые значения, чтобы он напрямую соединялся с 45 по 23 или с 11 по 33. В Excel существует ли этот параметр? incluedZero, похоже, не имеет никакого влияния.


person kumar    schedule 25.12.2013    source источник
comment
includeZero для оси, а не для данных. Вероятно, вам потребуется реализовать обратный вызов данных чертежа, который в основном ничего не делает для элементов с нулями. Вы также можете рассмотреть возможность редактирования данных до их загрузки.   -  person Travis    schedule 25.12.2013
comment
не могли бы вы предоставить мне пример того, как реализовать обратный вызов данных чертежа?   -  person kumar    schedule 25.12.2013
comment
dygraphs.com/tests/plotters.html, вероятно, лучше всего подходит для начала.   -  person Travis    schedule 26.12.2013


Ответы (1)


Действительно простой ответ — удалить запятую там, где значение не нужно или нежелательно.

Так например

"2008-05-09,70,0\n"+
//Should be "2008-05-09,70\n"+

и

"2008-05-12,70,\n"+
//Should be "2008-05-12,70\n"+

Однако, если вы действительно не можете изменить данные, которые передаются DyGraphs, у вас есть два варианта.

Создайте график, извлеките данные, а затем удалите значение столбца, где оно равно 0 или null, с помощью array.pop(), затем перезагрузите измененные данные обратно в Dygraphs с помощью updateOptions(). Вы можете использовать метод, который я описываю в своем ответе ">здесь в качестве отправной точки

OR

Создайте собственный плоттер (как показано ниже), который просто рисует линию до следующего ненулевого/нулевого значения. Вышеприведенные два являются лучшими решениями, потому что Dygraphs по-прежнему будет думать, что в определенные моменты времени есть нулевые значения (потому что это в конце концов находится в данных, которые вы ему предоставили).

//Define the custom plotter
var custom_plotter = function(e) {
    var context = e.drawingContext;
    var points = e.points; 
    var num_points = points.length;

    context.beginPath(); //Start

    //Move "paint brush" to the start location
    context.moveTo(points[0].canvasx, points[0].canvasy); 

    var p; //var to store current point
    for(var i = 1; i < num_points; i++) {
        p = points[i];


        if(p.yval != 0 && p.yval != null) {
            //Map out a line if the current value is desirable
            context.lineTo(p.canvasx, p.canvasy); 
        }
    }
    context.stroke(); //Actually draw the lines mapped out in the loop above
    context.closePath(); //Close
}

g = new Dygraph(

    // containing div
    document.getElementById("graphdiv"),

    // CSV or path to a CSV file.
    "Date,Duration,Error\n" +
    "2008-05-07,75,23\n" +
    "2008-05-08,70,45\n" +
    "2008-05-09,70,0\n" +
    "2008-05-10,70,23\n" +
    "2008-05-11,70,11\n" +
    "2008-05-12,70,\n" +
    "2008-05-13,80,33\n",
     {
        // options go here. See http://dygraphs.com/options.html
        legend: 'always',
        animatedZooms: true,
        title: 'dygraphs chart template',
         plotter: custom_plotter, //Pass Dygraphs the custom plotter defined above
     }
  );
person ConnectedSystems    schedule 14.01.2014