Chart JS - 设置x轴时间序列的周开始

时间:2016-12-16 09:20:54

标签: javascript angularjs charts time-series chart.js

使用ChartJS 2.4,我在两个日期之间查询一组记录:

      startDate: '2016-11-05T18:06:17.762Z'
      endDate: '2016-12-05T18:06:17.762Z'

鉴于比例配置,我想在用户选择的日期范围开始一周......

 isoWeekday: true,
 type: 'time',
 unitStepSize: 1,
 time: {
   displayFormats: {
     'week': 'MMM DD'
   },
   unit: 'week',
 },

这让我得到了一个截断的图表:

enter image description here

因此,如果没有为开始日期11/5返回任何记录,我会在数组的开头手动插入数值为0,以确保显示用户期望的开始日期:

  if (scope.chart_data.labels.indexOf('11/5') == -1) {
    scope.chart_data.labels.unshift('11/5');
    scope.chart_data.datasets[0].data.unshift(0);
  }

除非这样做,否则将图表延长一周,没有数据...并且不会在11/5上开始一周:

enter image description here

如何在11/5或我想要的任何一周启动图表,并从那里获得unit: week配置增量?

如果我删除unit: week并使用unitStepSize: 7手动设置步长,它会在开始时执行我想要的操作,但出于某种原因,在最后一个标签中显示:

enter image description here

min对象中使用max time

   max: scope.end_display, // 12/05/2016
   min: scope.start_display // 11/05/2016

我明白了:

enter image description here

为什么不在11/5上开始折线图?

标签:

["11/05/2016", "11/06/2016", "11/07/2016", "11/08/2016", "11/09/2016", "11/13/2016", "11/15/2016", "11/16/2016", "11/17/2016", "11/20/2016", "11/27/2016", "11/28/2016", "11/29/2016", "12/01/2016", "12/04/2016"]

数据:

[0, 3, 2, 1, 1, 7, 3, 2, 26, 2, 6, 3, 1, 1, 1]

3 个答案:

答案 0 :(得分:1)

您应该修改轴设置以设置最大值和最小值(可能是开始日期范围)。一个例子(注意!使用您自己的必需格式):

time: {
  unit: 'month',
  displayFormats: {
     month: 'MM'
  },
  max: moment(data.end_date).format('MM'),
  min: monent(data.start_date).format('MM')
}

答案 1 :(得分:0)

我意识到我在这方面已经很晚了,但也许您应该尝试将distribution选项设置为series。请参阅此处的文档:

  

比例分布

     

分布属性控制沿着的数据分布   规模:

'linear': data are spread according to their time (distances can vary)
'series': data are spread at the same distance from each other

这应该可以修复那些间距全部被破坏的奇怪格式。

答案 2 :(得分:0)

您可以将isoWeekday: true添加到time的配置中

https://www.chartjs.org/docs/latest/axes/cartesian/time.html