Chart.js时间刻度不显示数据

时间:2017-03-30 12:52:52

标签: javascript time chart.js

我有一个显示正常的Chart.js图表,直到我添加time scale为止。配置如下所示:

    this.chart = new Chart(this.ctx, {
        type: 'line',
        data: data,
        options: {
            legend: {
                display: false
            },
            scales: {
                xAxes: [{
                    type: 'time',
                    time: {
                        unit: 'month',
                        format: 'timeFormat'
                    }
                }]
            }
        }
    });

data对象如下所示:

let data = {
    labels: ["1485903600", "1490738400"],
    datasets: [{
        label: '',
        data: [120, 30],
        lineTension: 0
    }]
};

x轴正确显示两个日期,y轴受正确限制(即120和30)限制,但数据未显示在图表上。

1 个答案:

答案 0 :(得分:8)

转换为时间刻度时图表未显示数据的原因是因为您传递了 string a = "aBcdef3213BBBBB0913456"; var charList = a.ToCharArray(); string newString = string.Empty; foreach (var letter in charList.Reverse()) { var number = 0; if (Int32.TryParse(letter.ToString(), out number)) { newString = string.Format("{0}{1}", letter, newString); } else { break; } } 构造函数无法解析的标签的字符串值。

时间刻度要求整数(自纪元以来的毫秒数),Date对象,Date对象或日期的字符串表示形式,其格式为{{1 }} 可以理解。

因此,在您的情况下,当渲染图表时,它无法为X轴创建moment.js个对象(因为您的标签值),因此它使用{{1}创建了2个Date.parse()个对象(这就是为什么X轴仍然会显示一些日期数据...请注意它是2017年的日期,因为Date会返回一个date,现在已初始化。

要更正此问题,只需将标签值转换为整数(例如删除引号),然后图表就会显示您的数据点。该图表看起来仍然很有趣,因为X比例是以new Date()为单位配置的,但您的数据值仅相隔1天(1485903600 = 1970年1月17日10:45 PM和1490738400 = 1970年1月18日12:05 AM)。

这是https://software.sandia.gov/downloads/pub/pyomo/PyomoOnlineDocs.html#_a_simple_concrete_pyomo_model,它会显示原始图表和正确的图表,以便您了解其中的差异。