在Chart.js中创建直方图

时间:2018-08-16 15:00:07

标签: javascript chart.js

我们在代码库中使用Chart.js库,我需要创建一个直方图,这不是它们的默认图表类型之一。因此,我试图覆盖条形图上的x轴刻度线,以使其出现在每个条形的左,右角,而不是直接在其下方。

在下面的示例中,通过在labels数组中添加额外的项并在options中显示第二个x轴,我已经获得了所需的x轴。但是,因为现在有了一个额外的标签,所以条形图占据了宽度的4/5处,为不存在的数据点留出了空间。

是否可以指定某种方式忽略丢失的数据点?或抵消酒吧?还是我吠错了树?

documentation很难解析,所以我不确定是否缺少简单的东西。

var ctx = document.getElementById("myChart").getContext('2d');
var myChart = new Chart(ctx, {
  type: 'bar',
  data: {
    labels: [0, 1, 2, 3, 4],
    datasets: [{
      label: 'Group A',
      data: [12, 19, 3, 5],
      backgroundColor: 'rgba(255, 99, 132, 1)',
    }]
  },
  options: {
    scales: {
      xAxes: [{
        display: false,
        barPercentage: 1.30,
      }, {
        display: true,
      }],
      yAxes: [{
        ticks: {
          beginAtZero:true
        }
      }]
    }
  }
});
canvas { max-width: 200px; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.2/Chart.min.js"></script>
<canvas id="myChart" width="20" height="20"></canvas>

编辑:我意识到还有其他一些库可以达到类似的目的,我正在寻找其他选择。但是,我已发布了此信息,以防万一有人通过Chart.js知道解决方案,这是理想的选择。

这是我要达到的最终结果的一个示例:

enter image description here

1 个答案:

答案 0 :(得分:6)

我相信您可以通过在x轴的max配置上使用ticks参数来获得所需的结果。

通过使用具有不同最大值的2个不同x轴,您可以将条形标签的标记方式与绘制方式不同。导致在条之间标记标记,而没有绘制额外的“空”条。

var ctx = document.getElementById("myChart").getContext('2d');
var myChart = new Chart(ctx, {
  type: 'bar',
  data: {
labels: [0, 1, 2, 3, 4],
datasets: [{
  label: 'Group A',
  data: [12, 19, 3, 5],
  backgroundColor: 'rgba(255, 99, 132, 1)',
}]
  },
  options: {
scales: {
  xAxes: [{
    display: false,
    barPercentage: 1.3,
    ticks: {
    	max: 3,
    }
 }, {
    display: true,
    ticks: {
        autoSkip: false,
    	max: 4,
    }
  }],
  yAxes: [{
    ticks: {
      beginAtZero:true
    }
  }]
}
  }
});
canvas { max-width: 200px; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.2/Chart.min.js"></script>
<canvas id="myChart" width="20" height="20"></canvas>