chart.js - 使用类型 : 'time' 时,chartjs 上的条会叠加

标签 chart.js

我正在尝试构建一个条形图,其中 X 轴代表时间。

但是,当我使用选项 xAxes: [{type: 'time'}] 时,条形开始叠加,呈现出奇怪的效果。

删除选项时,条形图正确显示,但 X 轴标签未显示为日期

我是不是遗漏了什么,或者这是一个错误?

演示 here

最佳答案

看起来 chartjs 很难在动态 x 刻度上正确设置条形宽度。实现所需内容的一种快速方法是在 x 轴上使用正常类别比例并在显示时格式化标签。为此,您的options 看起来像这样;

 options: {
     scales: {
       xAxes: [{
         ticks: {
           userCallback: function(label, index, labels) {
             return moment(label, "YYYYMMDD").format("MMM DD, YYYY");
           },
         },
       }],
     }
   }

ticks 中的 userCallback 函数只需返回一个字符串,这样您就可以根据需要对其进行格式化。

 var labels = ["20170601", "20170602", "20170403", "20170503", "20170703", "20170404", "20170504", "20170704", "20170405", "20170505", "20170605", "20170705", "20170406", "20170606", "20170607", "20170608", "20170509", "20170609", "20170510", "20170511", "20170412", "20170512", "20170612", "20170413", "20170613", "20170414", "20170614", "20170515", "20170615", "20170516", "20170616", "20170517", "20170418", "20170518", "20170419", "20170519", "20170619", "20170420", "20170620", "20170421", "20170621", "20170522", "20170622", "20170523", "20170623", "20170424", "20170524", "20170425", "20170426", "20170526", "20170626", "20170427", "20170627", "20170328", "20170428", "20170628", "20170329", "20170529", "20170629", "20170330", "20170530", "20170630", "20170331", "20170531"],
   values = [5.79, 7.41, 7.08, 7.25, 7.46, 6.79, 7.01, 5.38, 7.35, 7.4, 7.1, 0.49, 7.57, 5.63, 4.15, 7.32, 5.55, 5, 3.26, 6.78, 2.75, 7.27, 7.33, 5.69, 7.1, 7.28, 6.85, 7.27, 6.4, 6.8, 6.9, 7.19, 3.97, 7.11, 6.89, 6.6, 4.03, 7.11, 5.49, 5.31, 2.43, 6.09, 6.14, 5.4, 3.7, 7.13, 5.72, 5.56, 5.4, 7.18, 7.08, 7.19, 7.39, 5.38, 6.96, 7.16, 5.34, 7.21, 5.98, 7.05, 7.32, 3.23, 6.88, 6.86];

 var ctx = document.getElementById("chart");
 var myChart = new Chart(ctx, {
   type: 'bar',
   data: {
     labels: labels,
     datasets: [{
       label: "Time",
       data: values,
     }]
   },
   options: {
     scales: {
       xAxes: [{
         ticks: {
           userCallback: function(label, index, labels) {
             return moment(label, "YYYYMMDD").format("MMM DD, YYYY");
           },
         },
       }],
     }
   }
 });
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.6.0/Chart.bundle.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
<div id="chart-wrapper">
  <canvas id="chart"></canvas>
</div>

关于chart.js - 使用类型 : 'time' 时,chartjs 上的条会叠加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44920236/

相关文章:

javascript - 使用动态数据更新 chartJS

javascript - ChartJs 无法使用此 JSON 对象

javascript - Chart JS Annotations Plugin - 你能创建一个工具提示来伴随注释吗?

javascript - 通过外部事件更改 Chartjs 中的点样式

chart.js - ChartJS 禁用图表区域外的网格线

javascript - 如何使用 Chartjs 制作交互式图例

chart.js - 如何在 Chart.js 中创建自定义对数轴

javascript - npm chart.js 最小化后很大

javascript - chart.js 在 div 和 Canvas 之外呈现

chart.js - 当在任意值之上/之下绘制时,如何更改 Chart.js 线条的颜色?