chart.js在折线图上切换x/y轴
chart.js switch x/y axis on line chart
假设我有一个这样的折线图: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>
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轴类别。
图片说明情况
不仅需要改变坐标轴的值,还需要改变图表本身。
我还没有找到任何表明你可以用线形图来做的东西,但你可以用散点来做。第一步是从xAxes
和yAxes
中抽象出轴属性:
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()
中的每个动作都将一个值为x
和y
的对象推入数组。这就是如何设置chartjs来接收数据(包含值x
和y
的对象数组),因此请确保遵循该模式。
现在设置轴:
const options = {
/*Whatever options you have*/,
scales: {
xAxes: condition ? yAxis : xAxis,
yAxes: condition ? xAxis : yAxis
}
}
现在,如果你把它放在你的代码中,你所要做的就是切换condition
来切换轴。
相关文章:
- Morris.js折线图x轴标签在调整大小后消失
- Chart.js折线图的0线型
- D3.js折线图中的样式工具提示
- 在 D3.js折线图中使用 IMG 而不是文本标签
- 图表.js折线图在 Y 轴上显示十进制值
- 将 XML 数据解析为图表.js折线图
- 在 d3.js 折线图中永久显示工具提示
- 图表.js折线图,如果数据相同,如何隐藏y轴开始和结束标签
- 如何从 d3.js 折线图更改 x 轴格式
- D3.js折线图不呈现股票折线图
- D3.js折线图工具提示问题
- plottable.js折线图中的自定义动画
- D3.js折线图错误:<路径>属性d=“;MNaN、NaNLNaN
- D3.js折线图-用日期控制x轴
- Chart.js-折线图格式数据为Lacs/Crores
- 转换谷歌分析2d数组值为c3/d3.js折线图的合适格式
- 如何确保chart .js折线图使用y轴上可用的所有空间
- D3.js折线图与日期在x轴
- D3.js折线图:轴固定位置
- dc.js折线图分组后的访问值