如何创建适用日期的Google直方图[1]?
我已经放置了示例代码(包含工作号和非工作日期示例):http://jsfiddle.net/Qquse/417/和下面的代码[2]
[1] https://developers.google.com/chart/interactive/docs/gallery/histogram
[2]
google.load("visualization", "1", {
packages: ["corechart"]
});
google.setOnLoadCallback(drawChart);
function str_to_utcdate(d) {
return new Date(d.substr(0, 4), d.substr(5, 2) - 1, d.substr(9, 2));
}
function drawChart() {
var data = google.visualization.arrayToDataTable([
['item', 'date'],
['a', str_to_utcdate('2001-07-01')],
['b', str_to_utcdate('2001-07-01')],
['c', str_to_utcdate('2001-07-01')], ]);
var chart = new google.visualization.Histogram(document.getElementById('chart_div1'));
chart.draw(data);
var data = google.visualization.arrayToDataTable([
['item', 'date'],
['a', 10],
['b', 20],
['c', 30], ]);
var chart = new google.visualization.Histogram(document.getElementById('chart_div2'));
chart.draw(data);
}
答案 0 :(得分:0)
5年了,直方图仍然不支持日期。由于我没有时间,我需要完成我的工作,所以我做了一个变通办法(很难受,很难受),但是可以。
首先,我定义了一种格式,只是将关键字放在每个标签的开头。就我而言,由于页面中只有一张图表,因此我只使用了关键字“日期”。
const keyword = 'date';
const options = {
// ...
hAxis: {
format: `'${keyword}'#`
},
}
如果页面中有多个图表,并且希望它们的行为有所不同,则可能需要为每个图表定义不同的关键字。
现在,使用查询选择器,我选择了所有感兴趣的标签元素
let labels = Array.from(document.querySelectorAll('#chart svg g:nth-of-type(3) g:nth-of-type(3) g text'));
就我而言,我的图表设置在ID为“图表”的DIV中。如果您使用其他任何ID,只需将#chart
替换为您的ID;
然后,我将仅过滤以我的关键字“日期”开头的标签
labels = labels.filter(g => g.innerHTML.startsWith(keyword));
这样,我将每个元素的innerHTML
替换为所需的日期格式。
labels.forEach(g => {
const date = new Date(+g.substring(keyword.length));
// you can apply any format method you wish
// .toLocaleDateString()
g.innerHTML = date.toLocaleDateString();
// moment.js
g.innerHTML = moment(date).format('DD/MM/YYYY HH:MM');
});
此外,我正在使用交互式图表,因此标签会在每次用户交互时刷新。因此,我将所有内容放在一个间隔内,最终结果如下:
const keyword = 'date';
const options = {
// ...
hAxis: {
format: `'${keyword}'#`
},
}
// ... chart setup
setInterval(() => {
let labels = Array.from(document.querySelectorAll('#chart svg g:nth-of-type(3) g:nth-of-type(3) g text'));
labels = labels.filter(g => g.innerHTML.startsWith(keyword));
labels.forEach(g => {
const date = new Date(+g.substring(keyword.length));
g.innerHTML = date.toLocaleDateString();
});
}, 100);
谨慎使用此答案。使用查询选择器修改第三方生成的内容是非常不安全的,因为它依赖于希望第三方开发人员不会修改内容生成方式的希望。
答案 1 :(得分:0)
尝试使用此柱形图:
public histogramChart: GoogleChartInterface = {
chartType: 'ColumnChart',
dataTable: [
['Date', 'Number'],
[new Date(2015, 1, 1), 5],
[new Date(2015, 1, 2), 5.1],
[new Date(2015, 1, 3), 6.2],
[new Date(2015, 1, 4), 7]
];,
//opt_firstRowIsData: true,
options: {
title: 'Shooting history',
legend: { position: 'none' },
colors: ['#4285F4'],
},
};