Skip to content

Commit 8d6861f

Browse files
committed
Add "SI extended" to display numbers in the full SI unit range (10^-30 to 10^30)
1 parent 2ceb3da commit 8d6861f

File tree

3 files changed

+21
-7
lines changed

3 files changed

+21
-7
lines changed

src/plots/cartesian/axes.js

+19-5
Original file line numberDiff line numberDiff line change
@@ -1558,7 +1558,8 @@ function autoTickRound(ax) {
15581558
var rangeexp = Math.floor(Math.log(maxend) / Math.LN10 + 0.01);
15591559
var minexponent = ax.minexponent === undefined ? 3 : ax.minexponent;
15601560
if(Math.abs(rangeexp) > minexponent) {
1561-
if(isSIFormat(ax.exponentformat) && !beyondSI(rangeexp)) {
1561+
if((isSIFormat(ax.exponentformat) && ax.exponentformat !== 'SI extended' && !beyondSI(rangeexp)) ||
1562+
(isSIFormat(ax.exponentformat) && ax.exponentformat === 'SI extended' && !beyondSIExtended(rangeexp))) {
15621563
ax._tickexponent = 3 * Math.round((rangeexp - 1) / 3);
15631564
} else ax._tickexponent = rangeexp;
15641565
}
@@ -1904,7 +1905,8 @@ function formatLog(ax, out, hover, extraPrecision, hideexp) {
19041905
var p = Math.round(x);
19051906
var absP = Math.abs(p);
19061907
var exponentFormat = ax.exponentformat;
1907-
if(exponentFormat === 'power' || (isSIFormat(exponentFormat) && beyondSI(p))) {
1908+
if(exponentFormat === 'power' || (isSIFormat(exponentFormat) && exponentFormat !== 'SI extended' && beyondSI(p)) ||
1909+
(isSIFormat(exponentFormat) && exponentFormat === 'SI extended' && beyondSIExtended(p))) {
19081910
if(p === 0) out.text = 1;
19091911
else if(p === 1) out.text = '10';
19101912
else out.text = '10<sup>' + (p > 1 ? '' : MINUS_SIGN) + absP + '</sup>';
@@ -2049,8 +2051,11 @@ function num2frac(num) {
20492051
// also automatically switch to sci. notation
20502052
var SIPREFIXES = ['f', 'p', 'n', 'μ', 'm', '', 'k', 'M', 'G', 'T'];
20512053

2054+
// extending SI prefixes
2055+
var SIPREFIXES_EXTENDED = ['q', 'r', 'y', 'z', 'a', 'f', 'p', 'n', 'μ', 'm', '', 'k', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y', 'R', 'Q'];
2056+
20522057
function isSIFormat(exponentFormat) {
2053-
return exponentFormat === 'SI' || exponentFormat === 'B';
2058+
return exponentFormat === 'SI' || exponentFormat === 'SI extended' || exponentFormat === 'B';
20542059
}
20552060

20562061
// are we beyond the range of common SI prefixes?
@@ -2064,6 +2069,10 @@ function beyondSI(exponent) {
20642069
return exponent > 14 || exponent < -15;
20652070
}
20662071

2072+
function beyondSIExtended(exponent) {
2073+
return exponent > 32 || exponent < -32;
2074+
}
2075+
20672076
function numFormat(v, ax, fmtoverride, hover) {
20682077
var isNeg = v < 0;
20692078
// max number of digits past decimal point to show
@@ -2139,7 +2148,8 @@ function numFormat(v, ax, fmtoverride, hover) {
21392148

21402149
// add exponent
21412150
if(exponent && exponentFormat !== 'hide') {
2142-
if(isSIFormat(exponentFormat) && beyondSI(exponent)) exponentFormat = 'power';
2151+
if((isSIFormat(exponentFormat) && exponentFormat !== 'SI extended' && beyondSI(exponent)) ||
2152+
(isSIFormat(exponentFormat) && exponentFormat === 'SI extended' && beyondSIExtended(exponent))) exponentFormat = 'power';
21432153

21442154
var signedExponent;
21452155
if(exponent < 0) signedExponent = MINUS_SIGN + -exponent;
@@ -2153,7 +2163,11 @@ function numFormat(v, ax, fmtoverride, hover) {
21532163
} else if(exponentFormat === 'B' && exponent === 9) {
21542164
v += 'B';
21552165
} else if(isSIFormat(exponentFormat)) {
2156-
v += SIPREFIXES[exponent / 3 + 5];
2166+
if(exponentFormat !== 'SI extended') {
2167+
v += SIPREFIXES[exponent / 3 + 5];
2168+
} else if(exponentFormat === 'SI extended') {
2169+
v += SIPREFIXES_EXTENDED[exponent / 3 + 10];
2170+
}
21572171
}
21582172
}
21592173

src/plots/cartesian/layout_attributes.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -897,7 +897,7 @@ module.exports = {
897897
},
898898
exponentformat: {
899899
valType: 'enumerated',
900-
values: ['none', 'e', 'E', 'power', 'SI', 'B'],
900+
values: ['none', 'e', 'E', 'power', 'SI', 'B', 'SI extended'],
901901
dflt: 'B',
902902
editType: 'ticks',
903903
description: [

src/traces/carpet/axis_attributes.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,7 @@ module.exports = {
234234
},
235235
exponentformat: {
236236
valType: 'enumerated',
237-
values: ['none', 'e', 'E', 'power', 'SI', 'B'],
237+
values: ['none', 'e', 'E', 'power', 'SI', 'B', 'SI extended'],
238238
dflt: 'B',
239239
editType: 'calc',
240240
description: [

0 commit comments

Comments
 (0)