2016-10-25 266 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 
    } 
} 

現在:

現在設置的軸。