【问题标题】:Chart.js sciptable options: accessing the values of the data object?Chart.js sciptable 选项:访问数据对象的值?
【发布时间】:2021-11-11 14:30:48
【问题描述】:

我正在从 API 收集数据。

采用 JSON 格式:

[{'time':'08h00','magnitude':25, 'temper':12.6},{'time':'09h00','magnitude':39, 'temper': 5.3}]

制作我的图表:

const ctx = document.getElementById('chart').getContext('2d');
    const chart = new Chart(ctx, {
        type: 'line',
        data: {
            datasets: [{
                label: "Line Graph",
                data: [],
                parsing: {
                    xAxisKey: 'time',
                    yAxisKey: 'temper'
                },
                borderColor: function(context) {
                    var index = context.dataIndex;
                    var value = context.dataset.data[index];
                    console.log(value);
                    return value > 10 ? 'red' : 'green';
                },
                
            }]
        },
        options: {
            scales: {
                x: {
                    type: 'time',
                    time: {
                        unit: 'day',
                    },
                },
            },
            responsive: 'true',
        }
    });

然后我填充它:

function addData(chart, data) {
    for (x in data) {
        chart.data.datasets[0].data.push(data[x]);
    }
    chart.update();
}

$.getJSON("https://8.0.0.85/last_48_hours", function (data) {
        addData(chart, data)
    });

我的问题是这个,它来自文档:

 borderColor: function(context) {
                    var index = context.dataIndex;
                    var value = context.dataset.data[index];
                    console.log(value);
                    return value > 10 ? 'red' : 'green';
                },

因为value是整个Object {'time':'08h00','magnitude':25, 'temper':12.6}

var value = context.dataset.data[index].temper;var value = context.dataset.data[index]['temper'];

并且所有方式都不起作用。如何引用value['temper']

【问题讨论】:

    标签: javascript chart.js chart.js3


    【解决方案1】:

    我无法告诉你为什么它不起作用,但你可以在脚本函数中更改以下行。

    来自:

    var value = context.dataset.data[index].temper; 
    

    到:

    var value = context.dataset.data[index]?.temper;
    

    问题是context.dataset.data[index] 有时会导致undefined

    请在下面查看您修改后的代码:

    new Chart('myChart', {
      type: 'line',
      data: {
        datasets: [{
          label: "Line Graph",
          data: [{
            'time': '08h00',
            'magnitude': 25,
            'temper': 12.6
          }, {
            'time': '09h00',
            'magnitude': 39,
            'temper': 5.3
          }],
          parsing: {
            xAxisKey: 'time',
            yAxisKey: 'temper'
          },
          borderColor: function(context) {
            var index = context.dataIndex;
            var value = context.dataset.data[index]?.temper;
            return value > 10 ? 'red' : 'green';
          }
        }]
      },
      options: {
        scales: {
          x: {
            type: 'time',
            time: {
              parser: 'HH\hmm',
              unit: 'day',
            },
          },
        },
        responsive: 'true'
      }
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.5.1/chart.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/moment@2.27.0"></script>
    <script src="https://cdn.jsdelivr.net/npm/chartjs-adapter-moment@0.1.1"></script>
    <canvas id="myChart"></canvas>

    【讨论】:

    • 死在右边。我最终自己弄清楚了,它归结为操作顺序。我只是在其中添加了一个 if 语句,以一种不同的方式达到同样的效果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-23
    • 2017-01-01
    • 2020-06-12
    • 2012-07-01
    相关资源
    最近更新 更多