py_*_*_ml 6 javascript charts chart.js
假设我有一个像这样的折线图:https : //jsfiddle.net/13fyhL4j/
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>
Run Code Online (Sandbox Code Playgroud)
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'
},
}]
}
}
});
Run Code Online (Sandbox Code Playgroud)
在此,x轴具有类别比例,y轴具有线性比例。我需要交换轴,但是,我找不到如何使x轴线性化和y轴类别。
不仅需要更改轴值,还需要更改图表本身。
我还没有找到任何表明您可以使用折线图来完成此操作的内容,但您可以使用散点图来完成此操作。第一步是从xAxes
和中抽象出轴属性yAxes
:
const xAxis = [{
/*type: 'time', time: { displayFormats: {} }, whatever*/
}];
const revenueAxis = [{
/*scaleLabel: {}, ticks: {}, whatever*/
}];
Run Code Online (Sandbox Code Playgroud)
然后,您可以根据您定义的任何条件决定将哪个数据集放置在哪个轴上:
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 );
Run Code Online (Sandbox Code Playgroud)
您会注意到,中的每个操作zipper()
都会将带有值的对象推x
送到y
数组中。这就是 Chartjs 接收数据(包含值x
和 的对象数组y
)的方式,因此请确保遵循该模式。
现在设置轴:
const options = {
/*Whatever options you have*/,
scales: {
xAxes: condition ? yAxis : xAxis,
yAxes: condition ? xAxis : yAxis
}
}
Run Code Online (Sandbox Code Playgroud)
现在,如果您将其放入代码中,您所要做的就是condition
切换轴。