Chart JS 中体积数据集的较小比例

Smaller scale for volume dataset in Chart JS

我正在绘制一些股票数据的图表,我想将体积放在底部的一个较小的灰色条数据集中,就像在 Yahoo Finance 中一样。

我想要的:

小灰色数据集在底部。

我得到的:

三个不同的Y尺度,体积数据集大小相同

我的代码:

当我创建图表时:

new Chart(context, {
    type: 'line',
    data: {
      labels: timestamps.map(n => 
        (new Date(n * 1000)).toLocaleString()
      ),
      datasets: [
        dataset,
        vdataset
      ]
    },
    options: {
      maintainAspectRatio: false,
      scales: {
        xAxis: {
          // type: 'time'
          ticks: {
            //autoSkip: true,
            maxTicksLimit: 10
          }
        },
        yAxes: [{
          id: 'volume',
          display: false
        }],
        y: {
          beginAtZero: false
        },
      },
      animation: {
        duration: 0
      },
      plugins: {
        autocolors: false,
        annotation: {
          annotations
        }
      },
      tooltips: {
        mode: 'nearest'
      },
      hover: {
        intersect: false
      }
    }
  });

体积数据集:

{
    type: 'bar',
    label: `Volume`,
    data: ...,
    backgroundColor: 'transparent',
    borderColor: 'grey',
    fill: 'origin',
    pointRadius: 0,
    borderWidth: 2,
    yAxisID: 'volume'
  }

你需要给每个数据集一个 yAxisID 然后你应该用这个 id 命名你的轴:

数据:

var data = {
  labels: labels,
  datasets: [{
    label: 'My First Dataset',
    data: generateTestSeries(),
    fill: false,
    borderColor: 'rgb(75, 192, 192)',
    tension: 0.1,
    yAxisID: "something",
  },
  {
    label: 'My Second Dataset',
    data: generateTestSeries(),
    fill: false,
    borderColor: 'rgb(182, 50, 192)',
    tension: 0.1,
    yAxisID: "volume",
  },
  ]
};

体重秤:

scales: {
    volume: {
        axis: "y",  
        min: -80,
        max: 60,
        position: 'right',
    },
    something: {
        axis: "y",
        min: -20,
        max: 70,
        position: 'left',
    }
}

此外,您不应该拥有列表 yAxes,这就是 chartjs 中轴的定义方式 2.x

这是一个 fiddle 以查看其使用情况:JSFiddle

编辑: 如果你想要一个不可见的轴,只需将 display 设置为 false,如现在更新的 Fiddle.