【问题标题】:hh:mm in chart.js on X-axis and text labels on the Y-axisx 轴上 chart.js 中的 hh:mm 和 Y 轴上的文本标签
【发布时间】:2017-09-19 11:58:07
【问题描述】:

我想在水平条形图中显示持续时间。我发现我需要 moment.js 所以可以使用格式 hh:mm 但我无法让水平条工作。我尝试从How to feed hour and minute data into chartJS 复制代码并将其更改为我想要的方式,但这不起作用。

代码:

var result = [{ x: "150:00", y: "bar 1" }, { x: "19:00", y: "bar 2" }, { x: "20:00", y: "bar 3" }, { x: "22:00", y: "bar 4" }];

    // parse labels and data
    var labels = result.map(e => moment(e.x, 'HH:mm'));
    var data = result.map(e => +e.y);

    var ctx = document.getElementById("MeSeStatusCanvas").getContext('2d');
    var myChart = new Chart(ctx, {
        type: 'horizontalBar',
        data: {
            labels: labels,
            datasets: [{
                label: 'Voltage Fluctuation',
                data: data,
                borderWidth: 1
            }]
        },
        options: {
            scales: {
                xAxes: [{
                    type: 'time',
                    time: {
                        unit: 'hour',
                        displayFormats: {
                            hour: 'HH:mm'
                        }
                    }
                }]
            },
        }
    });

谁能帮帮我?

提前致谢

【问题讨论】:

    标签: chart.js momentjs


    【解决方案1】:

    ꜰɪʀꜱᴛ

    如下解析标签和数据:

    var labels = result.map(e => e.y);
    var data = result.map(e => moment(e.x, 'HH:mm'));
    

    ꜱᴇᴄᴏɴᴅ

    使用 yLabels 属性而不是 labels (在 data 对象内),例如:

    ...
    data: {
          yLabels: labels,
          ...
    

    ᴡᴏʀᴋɪɴɢ ᴇxᴀᴍᴘʟᴇ ⧩

    var result = [{ x: "150:00", y: "bar 1" }, { x: "19:00", y: "bar 2" }, { x: "20:00", y: "bar 3" }, { x: "22:00", y: "bar 4" }];
    
    // parse labels and data
    var labels = result.map(e => e.y);
    var data = result.map(e => moment(e.x, 'HH:mm'));
    
    var ctx = document.getElementById("MeSeStatusCanvas").getContext('2d');
    var myChart = new Chart(ctx, {
       type: 'horizontalBar',
       data: {
          yLabels: labels,
          datasets: [{
             label: 'Voltage Fluctuation',
             data: data,
             borderWidth: 1
          }]
       },
       options: {
          scales: {
             xAxes: [{
                type: 'time',
                time: {
                   unit: 'hour',
                   displayFormats: {
                      hour: 'HH:mm'
                   },
                   /* (required to show first bar)
                   	set min prop, less than the minimum value of data.
                   	in this case minimum data value is '15:00', so we set '14:00'
                    */
                   min: moment('14:00', 'HH:mm')
                }
             }]
          }
       }
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.0/Chart.min.js"></script>
    <canvas id="MeSeStatusCanvas"></canvas>

    【讨论】:

    • 啊,是的,这就是我要找的。直到现在我才注意到还有另一个问题......时间轴必须代表持续时间而不是时间。我注意到不能输入超过 24 小时的时间。你知道是否有办法使这项工作?
    • 不!那是不可能的。您看到的是预期的行为。
    猜你喜欢
    • 1970-01-01
    • 2018-01-10
    • 1970-01-01
    • 2014-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多