(prefix: string, domainDataName: string, discreteColumn: DiscreteColumn)
| 33 | export type Binnable = NativeBinnable | AugmentBinnable; |
| 34 | |
| 35 | export function binnable(prefix: string, domainDataName: string, discreteColumn: DiscreteColumn): Binnable { |
| 36 | const { column, defaultBins, maxbins, maxbinsSignalDisplayName, maxbinsSignalName } = discreteColumn; |
| 37 | if (column.quantitative) { |
| 38 | const field = `${prefix}_bin_${exprSafeFieldName(column.name)}`; |
| 39 | const fieldEnd = `${field}_end`; |
| 40 | const binSignal = `${field}_bins`; |
| 41 | const extentSignal = `${field}_bin_extent`; |
| 42 | domainDataName = `${field}_sequence`; //override the data name |
| 43 | const extentTransform: ExtentTransform = { |
| 44 | type: 'extent', |
| 45 | field: safeFieldName(column.name), |
| 46 | signal: extentSignal, |
| 47 | }; |
| 48 | const maxbinsSignal: Signal = { |
| 49 | name: maxbinsSignalName, |
| 50 | value: defaultBins, |
| 51 | bind: { |
| 52 | name: maxbinsSignalDisplayName, |
| 53 | debounce: 50, |
| 54 | input: 'range', |
| 55 | min: 1, |
| 56 | max: maxbins, |
| 57 | step: 1, |
| 58 | }, |
| 59 | }; |
| 60 | const binTransform: BinTransform = { |
| 61 | type: 'bin', |
| 62 | field: safeFieldName(column.name), |
| 63 | as: [ |
| 64 | field, |
| 65 | fieldEnd, |
| 66 | ], |
| 67 | signal: binSignal, |
| 68 | extent: { |
| 69 | signal: `[${extentSignal}[0], ${extentSignal}[1] + 1e-11]`, //add a tiny bit to the upper extent to force the extra bin - https://github.com/vega/vega/issues/2899 |
| 70 | }, |
| 71 | maxbins: { |
| 72 | signal: maxbinsSignalName, |
| 73 | }, |
| 74 | }; |
| 75 | const dataSequence: Data = { |
| 76 | name: domainDataName, |
| 77 | transform: [ |
| 78 | { |
| 79 | type: 'sequence', |
| 80 | start: { |
| 81 | signal: `${binSignal}.start`, |
| 82 | }, |
| 83 | stop: { |
| 84 | signal: `${binSignal}.stop`, |
| 85 | }, |
| 86 | step: { |
| 87 | signal: `${binSignal}.step`, |
| 88 | }, |
| 89 | }, |
| 90 | { |
| 91 | type: 'formula', |
| 92 | expr: 'datum.data', |
no test coverage detected