【问题标题】:ChartJS bar chart fixed width for dynamic data setsChartJS 条形图固定宽度动态数据集
【发布时间】:2018-02-05 09:56:44
【问题描述】:

我正在使用 ChartJs 创建条形图。 数据集是动态的。由于数据集是动态的,所以条形的宽度也在变化。

例如,仅适用于一个标签的条形宽度

许多标签的条形宽度

如何在不考虑标签数量的情况下为栏设置固定宽度

我正在使用以下选项。

xAxes: [{
    barPercentage: 1,
    categoryPercentage: 0.3
}]

【问题讨论】:

    标签: javascript jquery html5-canvas chart.js


    【解决方案1】:

    您可以将“categoryPercentage”划分为尽可能多的列并乘以当前数据集中的列数

    https://jsfiddle.net/qrwvvtxs/2/

    var barChartData1 = {
      labels: ["January", "February", "March", "April", "May", "June", "July"],
      datasets: [{
        label: 'Dataset 1',
        data: [3,2,7,4,5,7,6]
      }, {
        label: 'Dataset 2',
        backgroundColor: "#faa",
        data: [11,13,21,13,16,21,18]
      }]
    };
    var barChartData2 = {
      labels: ["January"],
      datasets: [{
        label: 'Dataset 1',
        data: [6]
      }, {
        label: 'Dataset 2',
        backgroundColor: "#faa",
        data: [11]
      }]
    };
    
    var ctx1 = document.getElementById("canvas1").getContext("2d");
    var ctx2 = document.getElementById("canvas2").getContext("2d");
    var myBar1 = new Chart(ctx1, {
      type: 'bar',
      data: barChartData1,
      options: {
        responsive: true,
        scales: {
          xAxes: [{
              barPercentage: 1,
              categoryPercentage: 0.5 / 10 * barChartData1.datasets[0].data.length
          }],
          yAxes: [{
            ticks: {
              beginAtZero:true
            }
          }]
        }
      }
    });
    var myBar2 = new Chart(ctx2, {
      type: 'bar',
      data: barChartData2,
      options: {
        responsive: true,
        scales: {
          xAxes: [{
              barPercentage: 1,
              categoryPercentage: 0.5 / 10 * barChartData2.datasets[0].data.length
          }],
          yAxes: [{
            ticks: {
              beginAtZero:true
            }
          }]
        }
      }
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.6.0/Chart.bundle.min.js"></script>
    <canvas id="canvas1"></canvas>
    <canvas id="canvas2"></canvas>

    【讨论】:

    • 哇,这很有帮助
    • @rmaksim 这是一个很好的解决方案。但我面临另一个问题。由于我们使用的是动态数据,因此数据长度也应该是动态的。例如,如果数据长度为 24,条形将开始重叠。你能看看那个场景吗?
    猜你喜欢
    • 2017-04-30
    • 2017-11-27
    • 2018-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-30
    • 1970-01-01
    相关资源
    最近更新 更多