0

Anyone able to help with the following problem:

Trying to draw a chart with four data series, two of which are scatter and one is spline. Purpose of the spline is just to draw a line between specific spots on the chart, not joining all of them together. The following is my code so far:

$(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]]
           }]
        });
    });

});

My problem now is, in the spline series, if I add a null between elements to prevent plotting the line between two points, the whole plot goes mayhem. The idea is to draw lines only so that points which are vertically on the same line get joined, eg. in this case "sleep time" and "wakeup time". For example,

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], 
  ...

You may try out the code at this jsfiddle.

4

1 回答 1

0

试试下面的。

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],
    ...
]

如您所见,您必须传递一个数组,其中第一个值必须是任何日期。

演示

于 2013-03-14T11:41:47.840 回答