11import { extent , deviation , max , mean , median , min , sum } from "d3" ;
22import { defined } from "../defined.js" ;
3- import { take } from "../options.js" ;
3+ import { percentile , take } from "../options.js" ;
44import { mapX , mapY } from "./map.js" ;
55
66export function normalizeX ( basis , options ) {
@@ -16,6 +16,7 @@ export function normalizeY(basis, options) {
1616export function normalize ( basis ) {
1717 if ( basis === undefined ) return normalizeFirst ;
1818 if ( typeof basis === "function" ) return normalizeBasis ( ( I , S ) => basis ( take ( S , I ) ) ) ;
19+ if ( / ^ p \d { 2 } $ / i. test ( basis ) ) return normalizeAccessor ( percentile ( basis ) ) ;
1920 switch ( `${ basis } ` . toLowerCase ( ) ) {
2021 case "deviation" : return normalizeDeviation ;
2122 case "first" : return normalizeFirst ;
@@ -41,6 +42,10 @@ function normalizeBasis(basis) {
4142 } ;
4243}
4344
45+ function normalizeAccessor ( f ) {
46+ return normalizeBasis ( ( I , S ) => f ( I , i => S [ i ] ) ) ;
47+ }
48+
4449const normalizeExtent = {
4550 map ( I , S , T ) {
4651 const [ s1 , s2 ] = extent ( I , i => S [ i ] ) , d = s2 - s1 ;
@@ -74,8 +79,8 @@ const normalizeDeviation = {
7479 }
7580} ;
7681
77- const normalizeMax = normalizeBasis ( ( I , S ) => max ( I , i => S [ i ] ) ) ;
78- const normalizeMean = normalizeBasis ( ( I , S ) => mean ( I , i => S [ i ] ) ) ;
79- const normalizeMedian = normalizeBasis ( ( I , S ) => median ( I , i => S [ i ] ) ) ;
80- const normalizeMin = normalizeBasis ( ( I , S ) => min ( I , i => S [ i ] ) ) ;
81- const normalizeSum = normalizeBasis ( ( I , S ) => sum ( I , i => S [ i ] ) ) ;
82+ const normalizeMax = normalizeAccessor ( max ) ;
83+ const normalizeMean = normalizeAccessor ( mean ) ;
84+ const normalizeMedian = normalizeAccessor ( median ) ;
85+ const normalizeMin = normalizeAccessor ( min ) ;
86+ const normalizeSum = normalizeAccessor ( sum ) ;
0 commit comments