如何创建适用于日期的 Google Histogram Chart [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);

}

最佳答案

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);

请谨慎使用此答案。 使用查询选择器修改第三方生成的内容是非常不安全的,因为它依赖于希望第三方开发人员不会修改内容生成方式。

关于javascript - 使用谷歌直方图创建日期直方图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21327803/

10-12 17:35
查看更多