带有 chart.js 的时间散点图

use*_*286 5 javascript time scatter-plot chart.js

我正在尝试在 (x,y) 数据的 chart.js 中呈现散点图,其中 x 是日期字符串。我在网上看到了很多示例和教程,其中讲师使用函数为示例图表生成时间戳,但我还没有找到任何使用可能收集的真实数据的示例。

我有看起来像这样的数据(从 cron 收集):

2017-07-08T06:15:02-0600,23.375
2017-07-08T06:20:02-0600,23.312
2017-07-08T06:25:02-0600,23.312
2017-07-08T06:30:02-0600,23.25
Run Code Online (Sandbox Code Playgroud)

我在chart.js中尝试了这样的数据(数据字符串周围有和没有“引号”):

data: [{
  x: 2017-07-08T06:15:02-0600,
  y: 23.375
},{
  x: 2017-07-08T06:20:02-0600,
  y: 23.312
},{
  x: 2017-07-08T06:25:02-0600,
  y: 23.312
},{
  x: 2017-07-08T06:30:02-0600,
  y: 23.25
Run Code Online (Sandbox Code Playgroud)

}],

什么都不渲染。我究竟做错了什么?

小智 8

根据散点图的文档

与可以以两种不同格式提供数据的折线图不同,散点图仅接受点格式的数据。

所以你不能使用像2017-07-08T06:15:02-0600. 您可以将日期转换为数字并在您的数据中使用它们。

在你的情况下:

data: [{
        x: 1499516102000,
        y: 23.375
    }, {
        x: 1499516402000,
        y: 23.312
    }, {
        x: 1499516702000,
        y: 23.312
    }, {
        x: 1499517002000,
        y: 23.25
    }
]
Run Code Online (Sandbox Code Playgroud)

现在您的 xAxes 将带有数字,因此您可以使用 acallback来修改 xAxes 标签。


use*_*286 7

这个建议不太对。javascript moment.js 可以使用日期作为 x 轴值来处理散点数据。由于某种原因,Chart.bundle.js 中的捆绑版本对我不起作用,所以我直接下载了 moment.js。我正在使用它来设置:

<script src="js/moment.js"></script>
<script src="js/Chart.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

这是我的 chart.js 数据详细信息:

data: [
  {x: moment("2017-07-08T06:15:02-0600"), y: 23.375},
  {x: moment("2017-07-08T06:20:02-0600"),y: 23.312},
  {x: moment("2017-07-08T06:25:02-0600"),y: 23.312},
  {x: moment("2017-07-08T06:30:02-0600"),y: 23.25}
],
Run Code Online (Sandbox Code Playgroud)

它工作得很好!

  • 效果很好!感谢您的解决方案。然后,我将以下内容添加到 `options.scales` 中: `xAxes: [{ticks: {callback: (value) =&gt; {return new Date(value).toLocaleDateString("fa-IR", {month: "short" ,年份:“数字”});}}}],` (2认同)

chi*_*ief 6

另一个对我来说非常有用的解决方案是仅使用line图表的类型,将其配置为使用 x 轴的日期,并另外禁用线条,以便它看起来像散点图。

new Chart(ctx, {
        type: 'line',
        data: {
            datasets: [{
                x: 2017-07-08T06:15:02-0600,
                y: 23.375
              },{
                x: 2017-07-08T06:20:02-0600,
                y: 23.312
              },{
                x: 2017-07-08T06:25:02-0600,
                y: 23.312
              },{
                x: 2017-07-08T06:30:02-0600,
                y: 23.25
            }]
          },
          options: {
            showLine: false,
            scales: {
              x:{
                type: 'time',
                display: true,
                title: {
                  display: true,
                  text: 'Date'
                },
              },
            }
          }
       }
    );
Run Code Online (Sandbox Code Playgroud)

我认为这是一个非常优雅的解决方案。该文档甚至指定:

散点图支持与折线图相同的所有属性。默认情况下,散点图会将折线图的 showLine 属性覆盖为 false。