首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用google直方图创建日期直方图

用google直方图创建日期直方图
EN

Stack Overflow用户
提问于 2014-01-24 16:26:55
回答 2查看 3.3K关注 0票数 4

如何创建可处理日期的Google直方图1?

我已经放置了示例代码(带有工作编号和非工作日期示例):http://jsfiddle.net/Qquse/417/和下面的代码2

1

2

代码语言:javascript
复制
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);

}
EN

回答 2

Stack Overflow用户

发布于 2019-08-05 23:07:25

5年了,直方图仍然不支持日期。由于我没有时间,我需要完成我的工作,我做了一个变通方法(太难看了,它很疼),但很有效。

首先,我定义了一种格式,将关键字放在每个标签的开头。在我的例子中,因为我的页面中只有一个图表,所以我只使用了关键字'date‘。

代码语言:javascript
复制
const keyword = 'date';
const options = {
      // ...
      hAxis: {
        format: `'${keyword}'#`
      },
}

如果您的页面中有多个图表,并且希望它们具有不同的行为,则可能需要为每个图表定义不同的关键字。

现在,使用查询选择器,我选择了我感兴趣的所有标签元素

代码语言:javascript
复制
let labels = Array.from(document.querySelectorAll('#chart svg g:nth-of-type(3) g:nth-of-type(3) g text'));

在我的例子中,我的图表被设置在一个id为' chart‘的DIV中。如果您使用任何其他id,只需将#chart替换为您的id即可;

然后我将只过滤以我的关键字'date‘开头的标签

代码语言:javascript
复制
labels = labels.filter(g => g.innerHTML.startsWith(keyword));

这样,我就把每个元素的innerHTML替换成我想要的日期格式。

代码语言:javascript
复制
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');

});

此外,我使用交互式图表,因此标签在每次用户交互时都会刷新。因此,我将所有内容都放在一个区间内,最终结果如下:

代码语言:javascript
复制
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);

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

票数 0
EN

Stack Overflow用户

发布于 2019-09-18 15:30:59

试试这个柱状图:

代码语言:javascript
复制
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'],
    },
};
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21327803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档