javascript - Y 轴上带有时间的 Chartjs 自定义图例

标签 javascript charts chart.js

我正在使用 chart.js 创建一个非常简单的图表,并遇到了两个小问题。

下面是我用来创建图表/图形的代码

<div style="width: 400px; height: 400px;">
 <canvas name="myChart" id="myChart" width="400px" height="400px"> </canvas>
 </div>

<script>
var ctx = document.getElementById("myChart");
var myChart = new Chart(ctx, {
type: 'bar',
animation: false,
data: {
    labels: ["Service A", "Service B", "Service C"],
    datasets: [{
        label: 'Time In Service',
        data: [180, 360, 180],
        backgroundColor: [
            '#0073CF',
            '#FF0000',
            '#7DC24B'
        ],
        borderColor: [
            '#fff',
            '#fff',
            '#fff'
        ],
        borderWidth: 2 
    }]
},
options: {
    scales: {
        yAxes: [{
            ticks: {
                beginAtZero:true
            }
        }]
    }
}
});

当前图表可以在这里看到Chart Generated 需要的是 Chart Needed

  1. 我想要右侧图例中的 x 轴标签
  2. 当前时间在数据中以秒为单位。我想以小时为单位显示在 x 轴上花费的时间:分钟

任何小的帮助将不胜感激。

最佳答案

试一试,

需要稍微修改您的数据结构并设置 y=axis 属性以显示所需的标签格式。

P.S:您需要使用最新的 chart.js 库,因为最近添加了位置正确的功能,而且我还增加了您给定示例中的第二个值,以便以 hh:mm 格式显示一些有意义的数据。

function formatTime(secs)
{
    var hours = Math.floor(secs / (60 * 60));
   
    var divisor_for_minutes = secs % (60 * 60);
    var minutes = Math.floor(divisor_for_minutes / 60);
 
    var divisor_for_seconds = divisor_for_minutes % 60;
    var seconds = Math.ceil(divisor_for_seconds);
  
    return hours + ":" + minutes;
}


var ctx = document.getElementById("myChart");


var myChart = new Chart(ctx, {
type: 'bar',
animation: false,
data: {
    labels: ["Time"],
    datasets: [{
        label: "Service A", 
        data: [1800], 
        backgroundColor: '#0073CF',
        borderColor: '#fff',
        borderWidth: 2 
    },
    {
        label: "Service B",
        data: [36000],
        backgroundColor: '#FF0000',
        borderColor: '#fff',
        borderWidth: 2 
    },
    {
        label: "Service C",
        data: [8000],
        backgroundColor: '#7DC24B',
        borderColor: '#fff',
        borderWidth: 2 
    }]
},
options: {
    scales: {
        yAxes: [{
            ticks: {
                beginAtZero:true,
                callback: function(label, index, labels) {
                 return formatTime(label);
                 }
            }
        }]
    },
    legend: {
            position: "right",
            display:true
      
        }
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.4.0/Chart.min.js"></script>
<div style="width: 400px; height: 400px;">
 <canvas name="myChart" id="myChart" width="400px" height="400px"> </canvas>
 </div>

关于javascript - Y 轴上带有时间的 Chartjs 自定义图例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41504465/

相关文章:

javascript - 是否可以在 javascript 中创建一个在刷新页面时不会改变的变量?

javascript - 使用Moment使用Electron/NodeJS将标准时间格式化为ISO 8601

php - 清除输入或搜索按钮上的输入文本字段?

css - 动态改变 chartjs 的高度

javascript - Chart.js 折线图中的渐变太模糊

Chart.js 工具提示背景颜色设置

javascript - 如何在 jQuery 中使用 GET 方法

perl - 为什么 Perl 的 GD::Graph 提示 "Invalid data set"?

javascript - 哪些 ruby​​ 图表库(gems)允许我使用时间作为 x 轴创建散点图?

javascript - FusionCharts 中的图例(饼图)- PHP