使用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',
},
这让我得到了一个截断的图表:
因此,如果没有为开始日期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
上开始一周:
如何在11/5
或我想要的任何一周启动图表,并从那里获得unit: week
配置增量?
如果我删除unit: week
并使用unitStepSize: 7
手动设置步长,它会在开始时执行我想要的操作,但出于某种原因,在最后一个标签中显示:
在min
对象中使用max
time
,
max: scope.end_display, // 12/05/2016
min: scope.start_display // 11/05/2016
我明白了:
为什么不在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]
答案 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