@@ -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
20502052var 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+
20522057function 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+
20672076function 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
0 commit comments