2016-10-25 157 views
4

比方说,我有一个这样的折线图:https://jsfiddle.net/13fyhL4j/chart.js之开关X/Y轴线图上

HTML:

<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.1.3/Chart.js"></script> 

<canvas id="myChart" width="400" height="400"></canvas> 

JS:

var ctx = document.getElementById("myChart"); 
var yLabels = [0, 2, 3, 6, 7]; 
var xLabels = ['A', 'B', 'C', 'D', 'E']; 

var myChart = new Chart(ctx, { 
    type: 'line', 
    data: { 
     labels: xLabels, 
     datasets: [ 
      { 
       type: 'line', 
       label: 'Line', 
       data: yLabels, 
       fill: false,     
      } 
     ] 
    }, 
    options:{ 
     scales: { 
        xAxes: [{ 
         display: true, 
         scaleLabel: { 
          display: true, 
          labelString: 'x label' 
         }, 

        }], 
        yAxes: [{ 
         display: true, 
         scaleLabel: { 
          display: true, 
          labelString: 'y label' 
         }, 

        }] 
       } 
    } 
}); 

这里x轴具有类别尺度,y轴具有线性尺度。我需要交换轴,但是,我找不到如何使x轴线性和y轴类别。

Image explaning situation

有必要不仅改变轴的值,而且还图表本身。

回答

0

我一直没有找到任何表明你可以用线图来做的事情,但是你可以用散点图来做到。第一步是从xAxesyAxes抽象掉的轴属性:

const xAxis = [{ 
    /*type: 'time', time: { displayFormats: {} }, whatever*/ 
}]; 

const revenueAxis = [{ 
    /*scaleLabel: {}, ticks: {}, whatever*/ 
}]; 

然后你决定把哪些数据集上轴以任何条件定义:

let swapAxes = true; 
const xValues = [1,2,3,4,5]; 
const yValues = [5,4,3,2,1]; 
let data = []; 

const zipper = (a, b) => { 
    for (let i of a) data.push({x: a[i-1], y: b[i-1]}); 
    return data; 
} 

data = condition ? zipper(yValues , xValues) : zipper(xValues, yValues); 

你请注意,zipper()中的每个操作都会将值为xy的对象压入阵列。这是图表设置接收数据的方式(包含值xy的对象数组),因此请确保遵循该模式。如果你把你的代码,你需要做的就是切换condition切换轴

const options = { 
    /*Whatever options you have*/, 
    scales: { 
     xAxes: condition ? yAxis : xAxis, 
     yAxes: condition ? xAxis : yAxis 
    } 
} 

现在:

现在设置的轴。