Skip to content

Commit 19e0481

Browse files
committed
feature(geomean): added geomean function + upkeep
1 parent e0a5f13 commit 19e0481

File tree

4 files changed

+9
-1
lines changed

4 files changed

+9
-1
lines changed

src/lib/index.js

+1
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ var statsModule = require('./stats');
114114
lib.aggNums = statsModule.aggNums;
115115
lib.len = statsModule.len;
116116
lib.mean = statsModule.mean;
117+
lib.geoMean = statsModule.geoMean;
117118
lib.median = statsModule.median;
118119
lib.midRange = statsModule.midRange;
119120
lib.variance = statsModule.variance;

src/lib/stats.js

+5
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,11 @@ exports.mean = function(data, len) {
4747
return exports.aggNums(function(a, b) { return a + b; }, 0, data) / len;
4848
};
4949

50+
exports.geoMean = function(data, len) {
51+
if(!len) len = exports.len(data);
52+
return exports.aggNums(function(a, b) { return a * b; }, 0, data) ** (1 / len);
53+
}
54+
5055
exports.midRange = function(numArr) {
5156
if(numArr === undefined || numArr.length === 0) return undefined;
5257
return (exports.aggNums(Math.max, null, numArr) + exports.aggNums(Math.min, null, numArr)) / 2;

src/plots/cartesian/layout_attributes.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -1012,6 +1012,7 @@ module.exports = {
10121012
'max ascending', 'max descending',
10131013
'sum ascending', 'sum descending',
10141014
'mean ascending', 'mean descending',
1015+
'geomean ascending', 'geomean descending',
10151016
'median ascending', 'median descending'
10161017
],
10171018
dflt: 'trace',
@@ -1026,7 +1027,7 @@ module.exports = {
10261027
'the *trace* mode. The unspecified categories will follow the categories in `categoryarray`.',
10271028
'Set `categoryorder` to *total ascending* or *total descending* if order should be determined by the',
10281029
'numerical order of the values.',
1029-
'Similarly, the order can be determined by the min, max, sum, mean or median of all the values.'
1030+
'Similarly, the order can be determined by the min, max, sum, mean, geomean or median of all the values.'
10301031
].join(' ')
10311032
},
10321033
categoryarray: {

src/plots/plots.js

+1
Original file line numberDiff line numberDiff line change
@@ -3127,6 +3127,7 @@ function sortAxisCategoriesByValue(axList, gd) {
31273127
'sum': function(values) {return Lib.aggNums(function(a, b) { return a + b;}, null, values);},
31283128
'total': function(values) {return Lib.aggNums(function(a, b) { return a + b;}, null, values);},
31293129
'mean': function(values) {return Lib.mean(values);},
3130+
'geomean': function(values) {return Lib.geoMean(values)},
31303131
'median': function(values) {return Lib.median(values);}
31313132
};
31323133

0 commit comments

Comments
 (0)