【问题标题】:Relative bar chart overlay on line chart in chart.jschart.js中折线图上的相对条形图叠加
【发布时间】:2019-05-02 14:00:48
【问题描述】:

我正在尝试在 chart.js 中构建一个图表,显示虚拟物品的价格数据,折线图显示价格,后置条形图显示销量,如下所示:

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

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

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

代码:

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 }
    }
});

【问题讨论】:

    标签: javascript charts chart.js


    【解决方案1】:

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

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

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

    请参阅以下工作 sn-p...

    $(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>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多