Skip to content

Commit

Permalink
fix(#9343): binned stacked area now correctly filter null values
Browse files Browse the repository at this point in the history
  • Loading branch information
kanitw committed May 8, 2024
1 parent a0e1512 commit 2c42b32
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 5 deletions.
9 changes: 6 additions & 3 deletions src/compile/data/filterinvalid.ts
Original file line number Diff line number Diff line change
Expand Up @@ -75,10 +75,9 @@ export class FilterInvalidNode extends DataFlowNode {

if (fieldDef !== null) {
if (fieldDef.type === 'temporal') {
vegaFilters.push(`(isDate(${ref}) || (isValid(${ref}) && isFinite(+${ref})))`);
vegaFilters.push(`(isDate(${ref}) || (${isValidFiniteNumberExpr(ref)})`);
} else if (fieldDef.type === 'quantitative') {
vegaFilters.push(`isValid(${ref})`);
vegaFilters.push(`isFinite(+${ref})`);
vegaFilters.push(isValidFiniteNumberExpr(ref));
} else {
// should never get here
}
Expand All @@ -94,3 +93,7 @@ export class FilterInvalidNode extends DataFlowNode {
: null;
}
}

export function isValidFiniteNumberExpr(ref: string) {
return `isValid(${ref}) && isFinite(+${ref})`;
}
3 changes: 2 additions & 1 deletion src/compile/data/stack.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import {duplicate, getFirstDefined, hash} from '../../util';
import {sortParams} from '../common';
import {UnitModel} from '../unit';
import {DataFlowNode} from './dataflow';
import {isValidFiniteNumberExpr} from './filterinvalid';

function getStackByFields(model: UnitModel): string[] {
return model.stack.stackBy.reduce((fields, by) => {
Expand Down Expand Up @@ -240,7 +241,7 @@ export class StackNode extends DataFlowNode {
const binEnd = vgField(dimensionFieldDef, {expr: 'datum', binSuffix: 'end'});
transform.push({
type: 'formula',
expr: `${bandPosition}*${binStart}+${1 - bandPosition}*${binEnd}`,
expr: `${isValidFiniteNumberExpr(binStart)} ? ${bandPosition}*${binStart}+${1 - bandPosition}*${binEnd} : ${binStart}`,
as: vgField(dimensionFieldDef, {binSuffix: 'mid', forAs: true})
});
}
Expand Down
2 changes: 1 addition & 1 deletion test/compile/data/stack.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,7 @@ describe('compile/data/stack', () => {
expect(assemble(model)).toEqual([
{
type: 'formula',
expr: '0.5*datum["bin_maxbins_10_b"]+0.5*datum["bin_maxbins_10_b_end"]',
expr: 'isValid(datum["bin_maxbins_10_b"]) && isFinite(+datum["bin_maxbins_10_b"]) ? 0.5*datum["bin_maxbins_10_b"]+0.5*datum["bin_maxbins_10_b_end"] : datum["bin_maxbins_10_b"]',
as: 'bin_maxbins_10_b_mid'
},
{
Expand Down

0 comments on commit 2c42b32

Please sign in to comment.