Skip to content
This repository was archived by the owner on Nov 25, 2021. It is now read-only.

Commit b6429c7

Browse files
author
sluger
committed
support multiple axes #13
1 parent c56d85d commit b6429c7

2 files changed

Lines changed: 117 additions & 1 deletion

File tree

samples/two-yaxis.html

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
<!doctype html>
2+
<html>
3+
4+
<head>
5+
<title>Chart.js Error Bars Plugin</title>
6+
<script src="../node_modules/chart.js/dist/Chart.bundle.js" type></script>
7+
<script src="../build/Plugin.Errorbars.js"></script>
8+
<style>
9+
canvas {
10+
-moz-user-select: none;
11+
-webkit-user-select: none;
12+
-ms-user-select: none;
13+
}
14+
</style>
15+
</head>
16+
17+
<body>
18+
<div id="container" style="width: 50%;">
19+
<canvas id="canvas"></canvas>
20+
</div>
21+
22+
<script>
23+
var color = Chart.helpers.color;
24+
var barChartData = {
25+
labels: ["January", "February", "March", "April"],
26+
datasets: [
27+
{
28+
label: "Dataset 1",
29+
//backgroundColor: '#d95f02',
30+
borderColor: "#d95f02",
31+
borderWidth: 1,
32+
data: [56, 33, 78, 54],
33+
errorBars: {
34+
January: {plus: 15, minus: -34},
35+
February: {plus: 15, minus: -3},
36+
March: {plus: 35, minus: -14},
37+
April: {plus: 45, minus: -4}
38+
},
39+
yAxisID: "y-axis-1"
40+
},
41+
{
42+
label: "Dataset 2",
43+
//backgroundColor: '#1b9e77',
44+
borderColor: "#1b9e77",
45+
borderWidth: 1,
46+
data: [100, 77, 33, 45],
47+
errorBars: {
48+
January: {plus: 15, minus: -34},
49+
February: {plus: 5, minus: -24},
50+
March: {plus: 20, minus: -4},
51+
April: {plus: 45, minus: -20}
52+
},
53+
yAxisID: "y-axis-2"
54+
}
55+
]
56+
};
57+
58+
window.onload = function () {
59+
var ctx = document.getElementById("canvas").getContext("2d");
60+
window.myBar = new Chart(ctx, {
61+
type: "bar",
62+
data: barChartData,
63+
options: {
64+
responsive: true,
65+
legend: {
66+
position: "top"
67+
},
68+
title: {
69+
display: true,
70+
text: "Chart.js Error Bars Plugin"
71+
},
72+
scales: {
73+
yAxes: [
74+
{
75+
type: "linear",
76+
display: true,
77+
position: "left",
78+
id: "y-axis-1"
79+
},
80+
{
81+
type: "linear",
82+
display: true,
83+
position: "right",
84+
id: "y-axis-2",
85+
gridLines: {
86+
drawOnChartArea: false
87+
}
88+
}
89+
]
90+
},
91+
plugins: {
92+
chartJsPluginErrorBars: {
93+
width: "60%"
94+
//color: 'darkgray'
95+
}
96+
}
97+
}
98+
});
99+
};
100+
</script>
101+
</body>
102+
103+
</html>

src/plugin.js

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,19 @@ const ErrorBarsPlugin = {
150150
ctx.restore();
151151
},
152152

153+
/**
154+
* resolve scale for current dataset from config and fallback to default scale
155+
* @param chart chartjs instance
156+
* @param horizontal orientation
157+
* @param i dataset index
158+
*/
159+
_resolveScale(chart, horizontal, i) {
160+
const xAxisId = chart.data.datasets[i].xAxisID || 'x-axis-0';
161+
const yAxisId = chart.data.datasets[i].yAxisID || 'y-axis-0';
162+
const scaleId = horizontal ? xAxisId : yAxisId;
163+
return chart.scales[scaleId];
164+
},
165+
153166
/**
154167
* plugin hook to draw the error bars
155168
* @param chart chartjs instance
@@ -176,7 +189,6 @@ const ErrorBarsPlugin = {
176189

177190
// determine value scale and orientation (vertical or horizontal)
178191
const horizontal = this._isHorizontal(chart);
179-
const vScale = horizontal ? chart.scales['x-axis-0'] : chart.scales['y-axis-0'];
180192

181193
const errorBarWidths = (Array.isArray(options.width) ? options.width : [options.width]).map((w) => this._computeWidth(chart, horizontal, w));
182194
const errorBarLineWidths = Array.isArray(options.lineWidth) ? options.lineWidth : [options.lineWidth];
@@ -188,6 +200,7 @@ const ErrorBarsPlugin = {
188200

189201
// map error bar to barchart bar via label property
190202
barchartCoords.forEach((dataset, i) => {
203+
const vScale = this._resolveScale(chart, horizontal, i);
191204
dataset.forEach((bar) => {
192205
let cur = errorBarCoords[i];
193206
if (!cur) {

0 commit comments

Comments
 (0)