javascript - chart.js 中折线图上的相对条形图叠加

标签 javascript charts chart.js

我正在尝试在 chart.js 中构建一个图表,显示虚拟元素的价格数据,折线图显示定价,背景条形图显示销量,如下所示: enter image description here

我的问题是,两者的 y 轴相同,这意味着价格数据显示在底部,差异不明显,因为交易量为数百。

我希望价格数据位于 y 轴上,条形图相对显示,最高交易量显示为 100% 高度,而不是 y 轴上的值,更像这样:

enter image description here

这可能吗,如何实现?谢谢!

代码:

let marketData = [["Nov 28 2018 20: +0",30.332,"103"],["Nov 28 2018 21: +0",25.801,"188"],["Nov 28 2018 22: +0",25.451,"262"],["Nov 28 2018 23: +0",12.484,"693"]];

let lineData = [];
let barData = [];
let labels = [];

marketData.forEach(function(thing) {
    labels.push(thing[0].replace(' +0', '00'));
    lineData.push(thing[1]);
    barData.push(thing[2]);
});

new Chart(document.getElementById("mixed-chart"), {
    type: 'bar',
    data: {
      labels: labels,
      datasets: [
        {
          label: "Price",
          type: "line",
          borderColor: "#3e95cd",
          data: lineData,
          fill: false
        },
        {
          label: "Sold",
          type: "bar",
          backgroundColor: "rgba(0,0,0,0.2)",
          data: barData
        }
      ]
    },
    options: {
      title: {
        display: true,
        text: 'Sale price vs sale volume'
      },
      legend: { display: false }
    }
});

最佳答案

使用第二个 y 轴为条形系列提供不同的比例

使用属性将每个数据集分配给它自己的轴 --> yAxisID

然后在scales.yAxes选项中设置y轴的匹配id

请参阅以下工作片段...

$(document).ready(function() {
  let marketData = [["Nov 28 2018 20: +0",30.332,"103"],["Nov 28 2018 21: +0",25.801,"188"],["Nov 28 2018 22: +0",25.451,"262"],["Nov 28 2018 23: +0",12.484,"693"]];

  let lineData = [];
  let barData = [];
  let labels = [];

  marketData.forEach(function(thing) {
    labels.push(thing[0].replace(' +0', '00'));
    lineData.push(thing[1]);
    barData.push(thing[2]);
  });

  new Chart(document.getElementById("mixed-chart"), {
    type: 'bar',
    data: {
      labels: labels,
      datasets: [
        {
          label: "Price",
          type: "line",
          borderColor: "#3e95cd",
          data: lineData,
          fill: false,
          yAxisID: 'A'  // <-- set y-axis id
        },
        {
          label: "Sold",
          type: "bar",
          backgroundColor: "rgba(0,0,0,0.2)",
          data: barData,
          yAxisID: 'B'  // <-- set y-axis id
        }
      ]
    },
    options: {
      title: {
        display: true,
        text: 'Sale price vs sale volume'
      },
      legend: {display: false},
      scales: {
        yAxes: [{
          id: 'A',  // <-- set y-axis id
          position: 'left',
        }, {
          id: 'B',  // <-- set y-axis id
          position: 'right',
          
          // hide grid lines and labels
          gridLines: {
            display: false
          },
          ticks: {
            display: false
          }
        }]
      }
    }
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.2/Chart.bundle.min.js"></script>
<canvas id="mixed-chart"></canvas>

关于javascript - chart.js 中折线图上的相对条形图叠加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53557106/

相关文章:

javascript - 如何防止 Bootstrap 使字体变粗?

javascript - 如何将反引号添加到 URL 字符串插值中

javascript - 如何修改 OHLC 图表中条形图的默认颜色?

javascript - 如何基于 2 个直径点且没有长度或高度值的 d3.js 绘制矩形?

javascript - 了解 nvd3 x 轴日期格式

javascript - keydown 上普通字符和半字符的区别

javascript - 试图检查一个复选框是否被选中,请问我做错了什么?

javascript - 如何用Chart.js实现连续线图中的不连续部分(跳跃)?

css - 将 2 个 chart.js 包含在一个 div 中

typescript - Chart.js ionic 2 Angular2 : Background color of bar graph not changing