javascript Chart.js -混合条形图和折线图-我可以得到线来填充整个列吗?

yyhrrdl8  于 2023-05-27  发布在  Java
关注(0)|答案(1)|浏览(118)

我使用Chart.js v2.5.0创建了一个这样的图表:

请注意,有时条形图会越过红色虚线。有时红色虚线会在不同的位置(通常在25,但在某些月份会在其他水平)。
我的问题是我希望红色虚线延伸到列的全宽。正如您在第一列中看到的,红色虚线仅进入该列的一半。我在图表的另一端也有同样的问题,红色虚线只到了列的一半。
我目前的实现是一个混合图,一个是条形图,另一个是折线图-数据如下:

data = {
        labels: ['Jan 21st', 'Feb 21st', 'Mar 21st', 'Apr 21st']
        datasets: [
            {
                type: 'bar',
                label: 'A',
                data: [10, 25, 18, 37],
            },
            {
                type: 'line',
                label: 'B',
                data: [25, 25, 25, 25],
                fill: false,
                borderWidth: 1,
                borderColor: '#f00',
                borderDash: [5,4],
                lineTension: 0,
                steppedLine: true
            }
        ]
    }

Chart.js是否有一个选项或方法来使红色虚线扩展到整个列宽?
我有另一个想法,但我不确定这是否可行:我可以使用条形图的红色虚线,只显示条形图的顶部线吗?

p1tboqfb

p1tboqfb1#

不幸的是,没有一种方法可以“配置”图表来实现您想要的。这一切都与折线图比例绘制的工作原理有关。话虽如此,您仍然可以通过使用一些“虚拟”数据欺骗chart.js来实现此行为。
基本上,您创建了一个“虚拟”的第一个和最后一个标签。然后将相应的“虚拟”第一个和最后一个值添加到条形数据数组中(此数据将永远不会显示)。然后将相应的“dummy”第一个和最后一个值添加到您的线数据数组中,但请确保您将该值设置为与下一个/上一个值相同,以直线结束(否则您的线将在开始和结束时形成Angular )。我的意思是。

var ctx = document.getElementById("myChart");
var myChart = new Chart(ctx, {
  type: 'bar',
  data: {
    labels: ['dummy1', 'Jan 21st', 'Feb 21st', 'Mar 21st', 'Apr 21st', 'dummy2'],
    datasets: [
      {
        type: 'bar',
        label: 'A',
        // the 1st and last value are placeholders and never get displayed on the chart
        data: [0, 10, 25, 18, 37, 0],
      },
      {
        type: 'line', 
        label: 'B',
        // the 1st and last value are placeholders and never get displayed on the chart
        // to get a straight line, the 1st and last values must match the same value as
        // the next/prev respectively
        data: [25, 25, 25, 25, 25, 25],
        fill: false,
        borderWidth: 1,
        borderColor: '#f00',
        borderDash: [5,4],
        lineTension: 0,
        steppedLine: true
      }
    ]
  },
  options: {
    scales: {
      yAxes: [{
        ticks: {
          beginAtZero: true
        }
      }],  
      xAxes: [{
        // exclude the 1st and last label placeholders by specifying the min/mix ticks
        ticks: {
          min: 'Jan 21st',
          max: 'Apr 21st',
        }
      }],
    }
  }
});

检查这个codepen example以查看它的实际操作。

相关问题