Проблема со значениями datetime и печатью сплайнового графика между точками данных

Кто-нибудь сможет помочь со следующей проблемой:

Попытка нарисовать диаграмму с четырьмя рядами данных, две из которых являются точечными, а одна - сплайновой. Назначение сплайна - просто провести линию между конкретными точками на графике, а не соединять их все вместе. Вот мой код на данный момент:

$(function () {
    var chart;
    $(document).ready(function() {
        chart = new Highcharts.Chart({
            chart: {
                renderTo: 'container',
                type: 'scatter',
                zoomType: 'xy'
            },
            title: {
                text: ''
            },
            xAxis: {
              type: 'datetime',
              ordinal: false,
              labels: {
                formatter: function() {
                   return Highcharts.dateFormat('%H', this.value);
                }
              }
            },
            yAxis: {
              categories: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
              gridLineWidth: 0,
              step: 1,
              title: '',
              labels: {
                style: {
                  color: '#6D869F',
                  fontSize: '9px',
                }
              },
            },
            tooltip: {
                formatter: function() {
                        return ''+
                        this.x +' cm, '+ this.y +' kg';
                }
            },
            legend: {
                layout: 'vertical',
                align: 'left',
                verticalAlign: 'top',
                x: 100,
                y: 70,
                floating: true,
                backgroundColor: '#FFFFFF',
                borderWidth: 1
            },
            plotOptions: {
                scatter: {
                    marker: {
                        radius: 5,
                        states: {
                            hover: {
                                enabled: true,
                                lineColor: 'rgb(100,100,100)'
                            }
                        }
                    },
                    states: {
                        hover: {
                            marker: {
                                enabled: false
                            }
                        }
                    }
                }
            },
            series: [{
                name: 'sleep time',
                marker: {
                  symbol: 'circle',
                },
                color: '#81c65b',
                data: [[Date.UTC(2012, 1, 1, 22, 15), 0], 
                       [Date.UTC(2012, 1, 1, 20, 30), 3],
                       [Date.UTC(2012, 1, 1, 21, 45), 5],
                       [Date.UTC(2012, 1, 1, 22, 00), 6]]
            }, 
            {
              name: 'wakeup time',
              marker: {
                symbol: 'circle',
                fillColor: '#76a4fb',
              },
              data: [[Date.UTC(2012, 1, 2, 08, 15), 0], 
                     [Date.UTC(2012, 1, 2, 07, 10), 1],
                     [Date.UTC(2012, 1, 2, 09, 20), 2],
                     [Date.UTC(2012, 1, 2, 07, 40), 3],
                     [Date.UTC(2012, 1, 2, 07, 30), 4],
                     [Date.UTC(2012, 1, 2, 08, 20), 5],
                     [Date.UTC(2012, 1, 2, 09, 30), 6]],
           },
           {
              name: 'sleep time over average',
              color: 'rgba(119, 152, 191, .5)',
              marker: {
                symbol: 'square',
                  fillColor: '#000',
              },
              data: [[Date.UTC(2012, 1, 1, 20, 15), 1],
                     [Date.UTC(2012, 1, 1, 23, 40), 2], 
                     [Date.UTC(2012, 1, 1, 21, 20), 4]]
           },
           {
              name: '',
              legend: {
                enabled: false,
              },
              color: '#d62a9c',
              type: 'spline',
              marker: {
                enabled: false,
              },
              data: [[Date.UTC(2012, 1, 1, 22, 15), 0], 
                     [Date.UTC(2012, 1, 2, 08, 15), 0],
                     [Date.UTC(2012, 1, 1, 20, 15), 1], 
                     [Date.UTC(2012, 1, 2, 07, 10), 1],
                     [Date.UTC(2012, 1, 1, 23, 40), 2], 
                     [Date.UTC(2012, 1, 2, 09, 20), 2],
                     [Date.UTC(2012, 1, 1, 20, 30), 3], 
                     [Date.UTC(2012, 1, 2, 07, 40), 3],
                     [Date.UTC(2012, 1, 1, 21, 20), 4], 
                     [Date.UTC(2012, 1, 2, 07, 30), 4],
                     [Date.UTC(2012, 1, 1, 21, 45), 5], 
                     [Date.UTC(2012, 1, 2, 08, 20), 5],
                     [Date.UTC(2012, 1, 1, 22, 00), 6], 
                     [Date.UTC(2012, 1, 2, 09, 30), 6]]
           }]
        });
    });

});

Моя проблема теперь в том, что в серии сплайнов, если я добавляю нуль между элементами, чтобы предотвратить построение линии между двумя точками, весь сюжет превращается в хаос. Идея состоит в том, чтобы рисовать линии только так, чтобы точки, находящиеся вертикально на одной линии, соединялись, например. в данном случае «время сна» и «время пробуждения». Например,

data: [
  [Date.UTC(2012, 1, 1, 22, 15), 0], 
  [Date.UTC(2012, 1, 2, 08, 15), 0], null,
  [Date.UTC(2012, 1, 1, 20, 15), 1], 
  [Date.UTC(2012, 1, 2, 07, 10), 1], null,
  [Date.UTC(2012, 1, 1, 23, 40), 2], 
  ...

Вы можете опробовать код на этом jsfiddle.


person aalamaki    schedule 13.03.2013    source источник


Ответы (1)


Попробуйте следующее.

data: [
    [Date.UTC(2012, 1, 1, 22, 15), 0], 
    [Date.UTC(2012, 1, 2, 08, 15), 0],
    [Date.UTC(2012, 1, 2, 08, 15), null],
    [Date.UTC(2012, 1, 1, 20, 15), 1], 
    [Date.UTC(2012, 1, 2, 07, 10), 1],
    [Date.UTC(2012, 1, 2, 08, 15), null],
    [Date.UTC(2012, 1, 1, 23, 40), 2], 
    [Date.UTC(2012, 1, 2, 09, 20), 2],
    [Date.UTC(2012, 1, 2, 08, 15), null],
    ...
]

Как видите, вам нужно передать массив, первое значение которого должно быть любой датой.

Демонстрация

person Ricardo Alvaro Lohmann    schedule 14.03.2013
comment
Большое спасибо ... работает как и ожидалось, не знал этого :) Провел несколько часов, разочаровавшись в этом ... - person aalamaki; 14.03.2013