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