【问题标题】:Chart.js - creating time series freqency chart with JSON dataChart.js - 使用 JSON 数据创建时间序列频率图表
【发布时间】:2018-05-02 03:05:21
【问题描述】:

所以最近我一直在开发一个从请求中收集数据的网络应用程序,我正在尝试根据每小时/每月的频率等将数据输出到图表中。

所以,我正在使用 Chart.js 并拥有日期的 JSON 数据,并且我正在尝试制作一个显示每小时请求频率等的图表。

我的数据只是每个请求都有一个时间戳,所以我只有一堆2018-01-03 15:15:04格式的时间戳。例如:

{'2018-01-03 15:15:04', '2018-01-04 06:32:45', '2018-01-04 23:32:45', '2018-02-23 01:24:32'}

除了,我有数百个。我想要的只是每小时、每月等的频率。

谁能指出我正确的方向?我的两个想法是:

  1. 只需自己进行计数和解析,然后得出每小时计数,然后将数据扔到图表上
  2. 不知何故使用他们的内置功能时间,即使在阅读文档后我仍然有点不清楚。

非常感谢大家!

这是我想要的示例: Chart example

另外,http://www.chartjs.org/samples/latest/scales/time/financial.html

【问题讨论】:

    标签: javascript web chart.js


    【解决方案1】:

    在你的名单上排名第一是你最好的选择。我写了一个例子来说明如何很容易地实现它。

    首先找到频率(我按月/年计算)并将其添加到Map。我使用了地图,因为地图的.keys().values() 函数按插入顺序返回。常规对象不能保证顺序。

    然后,Chart.js 可以很容易地显示这些值,使用 spread syntax.keys().values() 迭代器转换为数组。

    var a = ['2018-01-03 15:15:04', '2018-01-04 06:32:45', '2018-01-04 23:32:45', '2018-02-23 01:24:32', '2018-02-23 04:33:12', '2018-03-23 05:33:12', '2018-03-22 08:33:12', '2018-04-27 01:33:12'];
    
    var freqMap = new Map();
    
    a.forEach(function(time) {
      var date = new Date(time);
      var monthName = date.toLocaleString("en-us", {
        month: "short"
      });
    
      var key = monthName + "-" + date.getFullYear();
      var count = freqMap.get(key) || 0;
      freqMap.set(key, ++count);
    });
    
    var ctx = document.getElementById("myChart").getContext('2d');
    var myLineChart = new Chart(ctx, {
      type: 'line',
      data: {
        labels: [...freqMap.keys()],
        datasets: [{
          label: 'Requests per month',
          data: [...freqMap.values()]
        }],
      },
      options: {
        elements: {
            line: {
                tension: 0
            }
        },
        scales: {
          yAxes: [{
            ticks: {
              beginAtZero: true,
              stepSize: 1
            }
          }]
        }
      }
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.2/Chart.bundle.min.js"></script>
    <canvas id="myChart" width="400" height="400"></canvas>

    【讨论】:

    • 哇,这看起来可以解决问题。非常感谢您的回复,太棒了!
    • 没问题!如果它解决了您的问题,请随时接受它作为答案。
    • 刚刚做了。非常感谢安德鲁 :)
    猜你喜欢
    • 1970-01-01
    • 2017-01-06
    • 1970-01-01
    • 2019-09-03
    • 2020-03-12
    • 2013-10-13
    • 1970-01-01
    • 2013-02-12
    • 1970-01-01
    相关资源
    最近更新 更多