我有一个用于在Google Charts中创建DataTable的数组。
阵列看起来像这样。
[
["date", "count"],
[Mon Sep 22 2014 18:07:03 GMT+0200 (CEST), 4], // First member is actually a Date Object!
[Tue Sep 23 2014 21:54:10 GMT+0200 (CEST), 7],
[Thu Sep 25 2014 03:37:30 GMT+0200 (CEST), 9],
[Fri Sep 26 2014 05:27:30 GMT+0200 (CEST), 10]
]
当像这样扔在图表机械上时......:
var chartModel = google.visualization.arrayToDataTable(dateAwareChartModel);
var dateFormatter = new google.visualization.DateFormat({formatType: "short"});
dateFormatter.format(chartModel, 0);
var chart = new google.visualization.LineChart(chartContext);
chart.draw(chartModel, {hAxis: {format: "dd MMM yy"}, tooltip: {trigger: "selection"}});
...最终以此图表结束:
至少有两件事情很奇怪:
我需要在这里配置什么?
提前致谢!
更新1:
就像kums指出的那样,arrayToDataTable
似乎是错误的方式:
google.visualization.arrayToDataTable()
此方法采用二维数组并将其转换为a 数据表。
列数据类型由数据自动确定 提交。 此方法不支持使用Date或DateTime 值,也不支持使用JavaScript文字单元格 具有f或v值的对象:{v:3.0,f:'Three'}。如果你需要 指定自定义单元格值或格式化值,或Date / DateTime value,使用DataTable.addRow()/ DataTable.addRows()或 DataTable.setValue()。
我现在正在使用addRow
:
var chartModel = new google.visualization.DataTable();
chartModel.addColumn("date", dateAwareChartModel[0][0]);
chartModel.addColumn("number", dateAwareChartModel[0][1]);
for (var i = 1 ; i < dateAwareChartModel.length ; i++) {
chartModel.addRow(dateAwareChartModel[i]);
}
var opts = {hAxis: {format: "dd MMM yy"}, tooltip: {trigger: "selection"}};
new google.visualization.LineChart(chartContext).draw(chartModel, opts);
我知道它可能更优雅。这只是一种快速而肮脏的方法。
有趣的是,前面描述的问题仍然存在。
好消息是选择点的定位并不奇怪。它就是这样的。定位取决于一天中的时间。
现在的问题是:如何告诉LineChart忽略时间值而只关注飞机日期呢?
更新2:
在谈论忽略时间价值时更具体:
想象一下这样的任何条目:
[Tue Sep 23 2014 21:54:10 GMT+0200 (CEST), 7]
是否可以让折线图显示
[Tue Sep 23 2014 00:00:00 GMT+0200 (CEST), 7]
这会自动导致正确放置标签。
当时我通过明确更改我的模型来实现这一目标(为每天创建新日期,将时间设置为午夜)。 我想知道是否有一种不那么冗长的方式让图表忽略了确切的时间。