Charts 如何在谷歌图表中动态创建刻度(月)?

Charts 如何在谷歌图表中动态创建刻度(月)?,charts,google-visualization,Charts,Google Visualization,给定的聚合数据表定义为: aggData:[日期:日期][团队:字符串][分数:数字] 我想绘制聚合数据,并能够按年份进行过滤。我在hAxis上使用动态记号来避免重复标签的问题。但是,自定义记号的标签不会显示。 我想让哈克斯显示月份。我的预感是我没有正确地创建滴答声 见下图 var hAxisTicks = []; var dateRange = aggData.getColumnRange(0); for (var y = dateRange.min.getFullYear(); y <

给定的聚合数据表定义为:

aggData:[日期:日期][团队:字符串][分数:数字]

我想绘制聚合数据,并能够按年份进行过滤。我在hAxis上使用动态记号来避免重复标签的问题。但是,自定义记号的标签不会显示。 我想让哈克斯显示月份。我的预感是我没有正确地创建滴答声

见下图

var hAxisTicks = [];
var dateRange = aggData.getColumnRange(0);

for (var y = dateRange.min.getFullYear(); y <= dateRange.max.getFullYear(); y = y + 1) {
    for(var m = dateRange.min.getMonth(); m <= dateRange.max.getMonth(); m = m + 1){
        hAxisTicks.push(new Date(y,m));
    }
}

var yearPicker = new google.visualization.ControlWrapper({
    controlType: 'CategoryFilter',
    containerId: 'categoryFilter_div',
    options: {
        filterColumnIndex: 0,
        ui: {
            allowTyping: false,
            allowMultiple: false,
            label: 'Year:',
            labelStacking: 'vertical'
        },
        useFormattedValue: true
    }
});

var lineChart = new google.visualization.ChartWrapper({
    chartType: 'LineChart',
    containerId: 'chart_div',
    options: {
        width: 900,
        height: 500,
        hAxis: {
                format: 'MMM',
                ticks: hAxisTicks
        }
    }
});

aggData.sort([{ column: 0 }]);

// draw chart
var dashboard = new google.visualization.Dashboard(document.getElementById('dashboard_div'));
dashboard.bind(yearPicker, lineChart);
dashboard.draw(aggData);
输出为:

"Oct 1, 2019",128,0,0,0 
"Nov 1, 2019",152,75,0,0 
"Dec 1, 2019",0,0,23,0
"Jan 1, 2020",225,0,0,84

for
循环的问题在月份部分

根据您提供的数据,最小日期的月份=9(10月)
但是,最大日期的月份=0(一月)

因此循环的月份
不会运行,因为9>0

相反,让我们使用
while
循环

var dateTick = dateRange.min;
while (dateTick.getTime() <= dateRange.max.getTime()) {
    hAxisTicks.push(dateTick);
    dateTick = new Date(dateTick.getFullYear(), dateTick.getMonth() + 1);
}
var dateTick=dateRange.min;

while(dateTick.getTime())您是否可以共享数据样本?您确定用于绘制图表的数据表中的第一列是日期吗?我已使用google.visualization.dataTableToCsv(aggData)将数据记录到控制台中。输出为:“2019年10月1日”,128,0,0,0“2019年11月1日”,152,75,0,0“2019年12月1日”,0,0,23,0“2020年1月1日”,225,0,0,84不确定-->
console.log(aggData.getColumnType(0));
--另外,请检查
hAxisTicks.length
Hmm,console.log(aggData.getColumnType(0))-->date console.log(hAxisTicks.length);-->0(意外)console.log(dateRange.min.getFullYear());-->2019 console.log(dateRange.min.getMonth());-->9 console.log(dateRange.max.getFullYear());-->2020 console.log(dateRange.max.getMonth());-->0我想我需要将月份的范围从dateRange.min.getMonth()设置为任意给定年份y的某个最大值,我无法计算出来。我知道这两个for循环是错误的,所以内部for循环不会执行(duh)因为该范围内的最大月份是2020年1月(因此最大月份值为0),而该范围内的最小月份是2019年10月(因此最小值为9)。由于最小值大于最大值,所以它甚至不会运行(var m=dateRange.min.getMonth();我是对的,这确实解决了这个问题,所以我将把这个标记为已解决,并发布另一个问题,即当你在一年中筛选时,如何重新计算hAxisTicks
"Oct 1, 2019",128,0,0,0 
"Nov 1, 2019",152,75,0,0 
"Dec 1, 2019",0,0,23,0
"Jan 1, 2020",225,0,0,84
var dateTick = dateRange.min;
while (dateTick.getTime() <= dateRange.max.getTime()) {
    hAxisTicks.push(dateTick);
    dateTick = new Date(dateTick.getFullYear(), dateTick.getMonth() + 1);
}