Skip to content

Commit 70e708a

Browse files
committed
adjust pad for inside labels and make more room for end labels to appear
1 parent aa57518 commit 70e708a

File tree

7 files changed

+65
-15
lines changed

7 files changed

+65
-15
lines changed

src/plots/cartesian/autorange.js

Lines changed: 65 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -206,15 +206,77 @@ function makePadFn(ax, max) {
206206
// 5% padding for points that specify extrapad: true
207207
var extrappad = 0.05 * ax._length;
208208

209-
var anchorAxis = (ax._anchorAxis || {});
210-
if((anchorAxis.ticklabelposition || '').indexOf('inside') !== -1) {
209+
if(
210+
(ax.ticklabelposition || '').indexOf('inside') !== -1 ||
211+
((ax._anchorAxis || {}).ticklabelposition || '').indexOf('inside') !== -1
212+
) {
211213
var axReverse = ax.autorange === 'reversed';
212214
if(!axReverse) {
213215
var rng = Lib.simpleMap(ax.range, ax.r2l);
214216
axReverse = rng[1] < rng[0];
215217
}
216218
if(axReverse) max = !max;
219+
}
220+
221+
extrappad = adjustPadForInsideLabelsOnAnchorAxis(extrappad, ax, max);
222+
extrappad = adjustPadForInsideLabelsOnThisAxis(extrappad, ax, max);
223+
224+
// domain-constrained axes: base extrappad on the unconstrained
225+
// domain so it's consistent as the domain changes
226+
if((ax.constrain === 'domain') && ax._inputDomain) {
227+
extrappad *= (ax._inputDomain[1] - ax._inputDomain[0]) /
228+
(ax.domain[1] - ax.domain[0]);
229+
}
230+
231+
if(max) {
232+
return function getPadMax(pt) { return pt.pad + (pt.extrapad ? extrappad : 0); };
233+
} else {
234+
return function getPadMin(pt) { return pt.pad + (pt.extrapad ? extrappad : 0); };
235+
}
236+
}
237+
238+
var TEXTPAD = 3;
239+
240+
function adjustPadForInsideLabelsOnThisAxis(extrappad, ax, max) {
241+
var ticklabelposition = ax.ticklabelposition || '';
242+
var has = function(str) {
243+
return ticklabelposition.indexOf(str) !== -1;
244+
};
245+
246+
if(!has('inside')) return extrappad;
247+
var isTop = has('top');
248+
var isLeft = has('left');
249+
var isRight = has('right');
250+
var isBottom = has('bottom');
251+
var isAligned = isBottom || isLeft || isTop || isRight;
252+
253+
if(
254+
(max && (isLeft || isBottom)) ||
255+
(!max && (isRight || isTop))
256+
) {
257+
return extrappad;
258+
}
259+
260+
// increase padding to make more room for inside tick labels of the axis
261+
var fontSize = ax.tickfont ? ax.tickfont.size : 12;
262+
var isX = ax._id.charAt(0) === 'x';
263+
var morePad = (isX ? 1.2 : 0.6) * fontSize;
264+
265+
if(isAligned) {
266+
morePad *= 2;
267+
morePad += (ax.tickwidth || 0) / 2;
268+
}
269+
270+
morePad += TEXTPAD;
271+
272+
extrappad = Math.max(extrappad, morePad);
217273

274+
return extrappad;
275+
}
276+
277+
function adjustPadForInsideLabelsOnAnchorAxis(extrappad, ax, max) {
278+
var anchorAxis = (ax._anchorAxis || {});
279+
if((anchorAxis.ticklabelposition || '').indexOf('inside') !== -1) {
218280
// increase padding to make more room for inside tick labels of the counter axis
219281
if((
220282
!max && (
@@ -236,7 +298,6 @@ function makePadFn(ax, max) {
236298
var sinA = Math.abs(Math.sin(rad));
237299

238300
// use bounding boxes
239-
morePad = 0;
240301
anchorAxis._vals.forEach(function(t) {
241302
if(t.bb) {
242303
var w = t.bb.width;
@@ -261,18 +322,7 @@ function makePadFn(ax, max) {
261322
}
262323
}
263324

264-
// domain-constrained axes: base extrappad on the unconstrained
265-
// domain so it's consistent as the domain changes
266-
if((ax.constrain === 'domain') && ax._inputDomain) {
267-
extrappad *= (ax._inputDomain[1] - ax._inputDomain[0]) /
268-
(ax.domain[1] - ax.domain[0]);
269-
}
270-
271-
if(max) {
272-
return function getPadMax(pt) { return pt.pad + (pt.extrapad ? extrappad : 0); };
273-
} else {
274-
return function getPadMin(pt) { return pt.pad + (pt.extrapad ? extrappad : 0); };
275-
}
325+
return extrappad;
276326
}
277327

278328
function concatExtremes(gd, ax, noMatch) {
1.72 KB
Loading
4.68 KB
Loading
207 Bytes
Loading
241 Bytes
Loading
195 Bytes
Loading
-749 Bytes
Loading

0 commit comments

Comments
 (0)