Highcharts xAxis

时间:2016-03-01 11:11:40

标签: javascript charts highcharts

我使用Highcharts专门用于某些图表Spline with plot bands。可以找到关联的jsfiddle here

$(function () {
$('#container').highcharts({
    chart: {
        type: 'spline'
    },
    title: {
        text: 'Wind speed during two days'
    },
    subtitle: {
        text: 'May 31 and and June 1, 2015 at two locations in Vik i Sogn, Norway'
    },
    xAxis: {
        type: 'datetime',
        labels: {
            overflow: 'justify'
        }
    },
    yAxis: {
        title: {
            text: 'Wind speed (m/s)'
        },
        minorGridLineWidth: 0,
        gridLineWidth: 0,
        alternateGridColor: null,
        plotBands: [{ // Light air
            from: 0.3,
            to: 1.5,
            color: 'rgba(68, 170, 213, 0.1)',
            label: {
                text: 'Light air',
                style: {
                    color: '#606060'
                }
            }
        }, { // Light breeze
            from: 1.5,
            to: 3.3,
            color: 'rgba(0, 0, 0, 0)',
            label: {
                text: 'Light breeze',
                style: {
                    color: '#606060'
                }
            }
        }, { // Gentle breeze
            from: 3.3,
            to: 5.5,
            color: 'rgba(68, 170, 213, 0.1)',
            label: {
                text: 'Gentle breeze',
                style: {
                    color: '#606060'
                }
            }
        }, { // Moderate breeze
            from: 5.5,
            to: 8,
            color: 'rgba(0, 0, 0, 0)',
            label: {
                text: 'Moderate breeze',
                style: {
                    color: '#606060'
                }
            }
        }, { // Fresh breeze
            from: 8,
            to: 11,
            color: 'rgba(68, 170, 213, 0.1)',
            label: {
                text: 'Fresh breeze',
                style: {
                    color: '#606060'
                }
            }
        }, { // Strong breeze
            from: 11,
            to: 14,
            color: 'rgba(0, 0, 0, 0)',
            label: {
                text: 'Strong breeze',
                style: {
                    color: '#606060'
                }
            }
        }, { // High wind
            from: 14,
            to: 15,
            color: 'rgba(68, 170, 213, 0.1)',
            label: {
                text: 'High wind',
                style: {
                    color: '#606060'
                }
            }
        }]
    },
    tooltip: {
        valueSuffix: ' m/s'
    },
    plotOptions: {
        spline: {
            lineWidth: 4,
            states: {
                hover: {
                    lineWidth: 5
                }
            },
            marker: {
                enabled: false
            },
            pointInterval: 3600000, // one hour
            pointStart: Date.UTC(2015, 4, 31, 0, 0, 0)
        }
    },
    series: [{
        name: 'Hestavollane',
        data: [0.2, 0.8, 0.8, 0.8, 1, 1.3, 1.5, 2.9, 1.9, 2.6, 1.6, 3, 4, 3.6, 4.5, 4.2, 4.5, 4.5, 4, 3.1, 2.7, 4, 2.7, 2.3, 2.3, 4.1, 7.7, 7.1, 5.6, 6.1, 5.8, 8.6, 7.2, 9, 10.9, 11.5, 11.6, 11.1, 12, 12.3, 10.7, 9.4, 9.8, 9.6, 9.8, 9.5, 8.5, 7.4, 7.6]

    }, {
        name: 'Vik',
        data: [0, 0, 0.6, 0.9, 0.8, 0.2, 0, 0, 0, 0.1, 0.6, 0.7, 0.8, 0.6, 0.2, 0, 0.1, 0.3, 0.3, 0, 0.1, 0, 0, 0, 0.2, 0.1, 0, 0.3, 0, 0.1, 0.2, 0.1, 0.3, 0.3, 0, 3.1, 3.1, 2.5, 1.5, 1.9, 2.1, 1, 2.3, 1.9, 1.2, 0.7, 1.3, 0.4, 0.3]
    }],
    navigation: {
        menuItemStyle: {
            fontSize: '10px'
        }
    }
});

});

我需要图表显示时间而不是时间--50分钟(以分钟为间隔)。也就是说,最正确的数据点是时间=现在,最左边的时间是50分钟。

添加样条数据不是问题,但我无法为xAxis添加正确的数据。

我所拥有的日期数据以毫秒为单位(1456783080016000),但考虑到xAxis必须更新这个图表的最佳方法是什么才能进入图表。

我见过的代码显示您可以像这样更新它:

Highcharts.charts[0].xAxis[0].update({categories:['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12']}, true);

如何将日期日期添加到此更新?

我的第二部分是这个问题的作用 pointInterval& pointStart。

我假设pointInterval是一分钟或(60000ms),点pointStart: Math.abs(new Date().getTime() - 3000000)现在是时间减去50分钟(3000000ms)。

这似乎不起作用所以任何建议都值得赞赏。

2 个答案:

答案 0 :(得分:1)

我会使用xAxis.tickPositionerxAxis.labels.formatter来获得所需的结果。片段:

    xAxis: {
        type: 'datetime',
        tickInterval: 600000, // get every 10th tick
        tickPositioner: function (min, max) {
          var ticks = [],
              interval = this.tickInterval;

          while (max >= min) {
            ticks.push(max);
            max -= interval;
          }
          return ticks.reverse(); 
        },
        labels: {
          formatter: function() {
            var max = this.axis.max,
                diff = max - this.value;

            if (diff === 0) {
                return 'Now';
            }
            return '-' + Highcharts.dateFormat('%M', diff) + 'mins';     
          }
        }
    },

现场演示:http://jsfiddle.net/tdmjm9pn/1/

如果不清楚,请告诉我。

答案 1 :(得分:0)

你可以尝试类似以下的内容

$(function() {
  $('#container').highcharts({
    xAxis: {
      categories: [1373155200000, 1373241600000, 1373328000000, 1373414400000, 1373500800000, 1373587200000, 1373673600000, 1373760000000, 1373846400000, 1373932800000, 1374019200000, 1374105600000],
      type: 'datetime',
      labels: {
        formatter: function() {
          var d = new Date(this.value);
          return d.toDateString();
        }
      }
    },

    series: [{
      data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4]
    }]
  });
});

Fiddle link