Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 8cedc03

Browse files
committed
Added exponentbase attribute for axes labeling.
1 parent 4cb2192 commit 8cedc03

File tree

5 files changed

+30
-22
lines changed

5 files changed

+30
-22
lines changed

src/components/colorbar/attributes.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,7 @@ module.exports = {
169169
showticksuffix: axesAttrs.showticksuffix,
170170
exponentformat: axesAttrs.exponentformat,
171171
showexponent: axesAttrs.showexponent,
172+
exponentbase: axesAttrs.exponentbase,
172173
title: {
173174
valType: 'string',
174175
role: 'info',

src/plots/cartesian/axes.js

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -697,7 +697,7 @@ function autoTickRound(ax) {
697697
}
698698
else maxend = Math.max(Math.abs(ax.range[0]), Math.abs(ax.range[1]));
699699

700-
var rangeexp = Math.floor(Math.log(maxend) / Math.LN10 + 0.01);
700+
var rangeexp = Math.floor(Math.log(maxend) / Math.log(ax.exponentbase) + 0.01);
701701
if(Math.abs(rangeexp) > 3) {
702702
if(ax.exponentformat === 'SI' || ax.exponentformat === 'B') {
703703
ax._tickexponent = 3 * Math.round((rangeexp - 1) / 3);
@@ -1064,12 +1064,18 @@ function numFormat(v, ax, fmtoverride, hover) {
10641064
// 0 is just 0, but may get exponent if it's the last tick
10651065
v = '0';
10661066
isNeg = false;
1067-
}
1068-
else {
1067+
} else {
10691068
v += e;
10701069
// take out a common exponent, if any
1071-
if(exponent) {
1072-
v *= Math.pow(10, -exponent);
1070+
// Special case for base 2 to follow "SI"
1071+
if(exponent && base === 2) {
1072+
v = v/1024;
1073+
1074+
// To make 1024 -> 1k
1075+
exponent -= 9;
1076+
tickRound += exponent;
1077+
} else {
1078+
v *= Math.pow(base, -exponent);
10731079
tickRound += exponent;
10741080
}
10751081
// round the mantissa
@@ -1091,26 +1097,26 @@ function numFormat(v, ax, fmtoverride, hover) {
10911097
// add exponent
10921098
if(exponent && exponentFormat !== 'hide') {
10931099
var signedExponent;
1094-
if(exponent < 0) signedExponent = '\u2212' + -exponent;
1095-
else if(exponentFormat !== 'power') signedExponent = '+' + exponent;
1096-
else signedExponent = String(exponent);
1100+
if(exponent < 0){
1101+
signedExponent = '\u2212' + -exponent;
1102+
} else if(exponentFormat !== 'power') {
1103+
signedExponent = '+' + exponent;
1104+
} else {
1105+
signedExponent = String(exponent);
1106+
}
10971107

10981108
if(exponentFormat === 'e' ||
10991109
((exponentFormat === 'SI' || exponentFormat === 'B') &&
11001110
(exponent > 12 || exponent < -15))) {
11011111
v += 'e' + signedExponent;
1102-
}
1103-
else if(exponentFormat === 'E') {
1112+
} else if(exponentFormat === 'E' && base === 10) {
11041113
v += 'E' + signedExponent;
1105-
}
1106-
else if(exponentFormat === 'power') {
1107-
v += '&times;10<sup>' + signedExponent + '</sup>';
1108-
}
1109-
else if(exponentFormat === 'B' && exponent === 9) {
1114+
} else if(exponentFormat === 'B' && exponent === 9 && base === 10) {
11101115
v += 'B';
1111-
}
1112-
else if(exponentFormat === 'SI' || exponentFormat === 'B') {
1116+
} else if((exponentFormat === 'SI' || exponentFormat === 'B') && (base === 2 || base === 10)) {
11131117
v += SIPREFIXES[exponent / 3 + 5];
1118+
} else {
1119+
v += '&times;' + base + '<sup>' + signedExponent + '</sup>';
11141120
}
11151121
}
11161122

src/plots/cartesian/layout_attributes.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -290,8 +290,8 @@ module.exports = {
290290
},
291291
exponentbase: {
292292
valType: 'number',
293-
min: 0,
294-
dflt: 10
293+
min: 2,
294+
dflt: 10,
295295
role: 'style',
296296
description: [
297297
'Determines the base for axes and exponent labels.'

src/plots/cartesian/set_convert.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,9 @@ module.exports = function setConvert(ax) {
4343
var clipMult = 10;
4444

4545
function toLog(v, clip){
46-
if(v>0) return Math.log(v)/Math.LN10;
46+
if(v > 0) return Math.log(v) / Math.log(ax.exponentbase || 10);
4747

48-
else if(v<=0 && clip && ax.range && ax.range.length===2) {
48+
else if(v <= 0 && clip && ax.range && ax.range.length === 2) {
4949
// clip NaN (ie past negative infinity) to clipMult axis
5050
// length past the negative edge
5151
var r0 = ax.range[0],
@@ -55,7 +55,7 @@ module.exports = function setConvert(ax) {
5555

5656
else return constants.BADNUM;
5757
}
58-
function fromLog(v){ return Math.pow(10,v); }
58+
function fromLog(v){ return Math.pow(ax.exponentbase, v); }
5959
function num(v){ return isNumeric(v) ? Number(v) : constants.BADNUM; }
6060

6161
ax.c2l = (ax.type==='log') ? toLog : num;

src/plots/gl3d/layout/axis_attributes.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ module.exports = {
9595
showticksuffix: axesAttrs.showticksuffix,
9696
showexponent: axesAttrs.showexponent,
9797
exponentformat: axesAttrs.exponentformat,
98+
exponentbase: axesAttrs.exponentbase,
9899
tickformat: axesAttrs.tickformat,
99100
hoverformat: axesAttrs.hoverformat,
100101
// lines and grids

0 commit comments

Comments
 (0)