代码之家  ›  专栏  ›  技术社区  ›  eldiablo62

如何创建具有不同标签的多行图形

  •  0
  • eldiablo62  · 技术社区  · 6 年前

    我需要创建一个图表,其中包含来自不同站点的不同价格,并且不同时进行。实际上,我使用的是javascript库chart.js。我想知道是否有可能在同一个日期有不同的点数和不同的?

        "{
          "site1":[
             {
               "datetime":"2019-01-09 14:43:58",
               "price":"649.99"
             },
             {
               "datetime":"2019-01-09 14:44:17",
               "price":"649.99"
             },
             {
               "datetime":"2019-01-09 15:02:59",
               "price":"649.99"
              },
              {
                "datetime":"2019-01-09 15:05:43",
                "price":"649.99"
              },
              {
                "datetime":"2019-01-09 15:08:52",
                "price":"649.99"
              },
              {
                "datetime":"2019-01-09 15:16:51",
                "price":"649.99"
              }
           ],
           "site2":[
             {
               "datetime":"2019-01-09 15:03:05",
               "price":"0"
             },
             {
               "datetime":"2019-01-09 15:05:52",
               "price":"804.91"
             },
             {
               "datetime":"2019-01-09 15:09:00",
               "price":"804.91"
             },
             {
               "datetime":"2019-01-09 15:16:58",
               "price":"804.91"
             }
           ]
         }"
    

    这是图表的数据示例。

    如果我的解释不简单,我很抱歉。

    谢谢你

    2 回复  |  直到 6 年前
        1
  •  1
  •   timclutton    6 年前

    是的,可以使用 time axis . 您需要重新构造数据以适应所需的输入格式;下面的代码段中有一个示例,使用 forEach .

    需要注意的是,chart.js需要moment.js来处理日期时间。确保在chart.js之前包含moment.js,或者使用chart.js bundled build .

    let j = {
        "site1": [{
            "datetime": "2019-01-09 14:43:58",
            "price": "649.99"
          },
          {
            "datetime": "2019-01-09 14:44:17",
            "price": "649.99"
          },
          {
            "datetime": "2019-01-09 15:02:59",
            "price": "649.99"
          },
          {
            "datetime": "2019-01-09 15:05:43",
            "price": "649.99"
          },
          {
            "datetime": "2019-01-09 15:08:52",
            "price": "649.99"
          },
          {
            "datetime": "2019-01-09 15:16:51",
            "price": "649.99"
          }
        ],
        "site2": [{
            "datetime": "2019-01-09 15:03:05",
            "price": "0"
          },
          {
            "datetime": "2019-01-09 15:05:52",
            "price": "804.91"
          },
          {
            "datetime": "2019-01-09 15:09:00",
            "price": "804.91"
          },
          {
            "datetime": "2019-01-09 15:16:58",
            "price": "804.91"
          }
        ]
      },
      k = Object.keys(j),
      datasets = [];
    
    // remodel the data so it can be provided direct to Chart.js
    k.forEach(function(val) {
      let d = {
        label: val,
        data: []
      };
    
      j[val].forEach(function(val2) {
        d.data.push({
          x: val2.datetime,
          y: val2.price
        });
      });
    
      datasets.push(d);
    });
    
    // create the chart.
    new Chart(document.getElementById('canvas'), {
      type: 'line',
      data: {
        datasets: datasets
      },
      options: {
        scales: {
          xAxes: [{
            type: 'time'
          }]
        }
      }
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.3/Chart.bundle.min.js"></script>
    <canvas id="canvas"></canvas>
        2
  •  1
  •   Kunal Khivensara    6 年前

    当您根据时间绘制图表时,可以使用chart.js+moment.js来实现这一点。

    请参见下面的代码或小提琴-> http://jsfiddle.net/goz3jehy/4/

    var config = {
      type: 'line',
      data: {
        datasets: [{
            label: "site1",
            backgroundColor: 'red',
            borderColor: 'pink',
            fill: false,
            data: [{
                x: '2019-01-09 14:43:58',
                y: 649.99
              },
              {
                x: '2019-01-09 14:44:17',
                y: 649.99
              },
              {
                x: "2019-01-09 15:02:59",
                y: 649.99
              },
              {
                x: "2019-01-09 15:05:43",
                y: 649.99
              },
              {
                x: "2019-01-09 15:08:52",
                y: 649.99
              },
              {
                x: "2019-01-09 15:16:51",
                y: 700
              }
            ],
          },
          {
            label: "site2",
            backgroundColor: 'orange',
            borderColor: 'yellow',
            fill: false,
            data: [{
                x: "2019-01-09 15:03:05",
                y: 0
              },
              {
                x: "2019-01-09 15:05:52",
                y: 804.91
              },
              {
                x: "2019-01-09 15:09:00",
                y: 804.91
              },
              {
                x: "2019-01-09 15:16:58",
                y: 804.91
              }
            ],
          }
        ]
      },
      options: {
        scales: {
          xAxes: [{
            type: 'time',
            time: {          
            }
          }],
        },
      }
    };
    
    var ctx = document.getElementById("myChart").getContext("2d");
    new Chart(ctx, config);