Skip to content

Commit 7cd8122

Browse files
committed
revise chart types
1 parent 0f46e87 commit 7cd8122

File tree

4 files changed

+125
-8
lines changed

4 files changed

+125
-8
lines changed

Diff for: charts/Bar.js

+50
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
const VegaLite = require('./VegaLite');
2+
3+
const defaults = {
4+
data: undefined,
5+
filter: undefined,
6+
y: undefined,
7+
aggregate: undefined,
8+
value: undefined,
9+
valueTitle: undefined,
10+
facet: undefined,
11+
facetTitle: undefined
12+
};
13+
14+
module.exports = ({spec}) => {
15+
const cfg = Object.assign({}, defaults, spec);
16+
17+
return VegaLite({
18+
spec: {
19+
config: {axis: {characterWidth: 0}},
20+
data: {
21+
url: cfg.data
22+
},
23+
transform: {
24+
filter: cfg.filter,
25+
calculate: [
26+
cfg.facet && {field: 'facet', 'expr': cfg.facet},
27+
cfg.y && {field: 'y', 'expr': cfg.y},
28+
cfg.value && {field: 'value', 'expr': cfg.value}
29+
].filter(Boolean)
30+
},
31+
mark: 'bar',
32+
encoding: {
33+
column: cfg.facet && {title: cfg.facetTitle || cfg.facet, field: 'facet', type: 'nominal'},
34+
x: {
35+
title: cfg.valueTitle, aggregate: cfg.aggregate,
36+
field: cfg.aggregate === 'count' ? '*' : 'value', type: 'quantitative'
37+
},
38+
y: {
39+
title: false, field: 'y', type: 'ordinal',
40+
axis: {axisWidth: 0, tickSize: 0, labelAngle: 0},
41+
sort: {
42+
op: cfg.aggregate,
43+
field: cfg.aggregate === 'count' ? '*' : 'value',
44+
order: 'descending'
45+
}
46+
}
47+
}
48+
}
49+
});
50+
};

Diff for: charts/DemographicBar.js

+61
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
const VegaLite = require('./VegaLite');
2+
3+
const defaults = {
4+
data: undefined,
5+
filter: undefined,
6+
age: undefined,
7+
sex: undefined,
8+
aggregate: 'sum',
9+
value: undefined,
10+
valueTitle: 'Population',
11+
bandSize: 21,
12+
facet: undefined,
13+
facetTitle: undefined,
14+
orient: 'vertical'
15+
};
16+
17+
module.exports = ({spec}) => {
18+
const cfg = Object.assign({}, defaults, spec);
19+
20+
return VegaLite({
21+
spec: {
22+
config: {axis: {characterWidth: 0}},
23+
data: {
24+
url: cfg.data
25+
},
26+
transform: {
27+
filter: cfg.filter,
28+
calculate: [
29+
cfg.facet && {field: 'facet', 'expr': cfg.facet},
30+
cfg.age && {field: 'age', 'expr': cfg.age},
31+
cfg.sex && {field: 'sex', 'expr': cfg.sex},
32+
cfg.value && {field: 'value', 'expr': cfg.value},
33+
].filter(Boolean)
34+
},
35+
mark: 'bar',
36+
encoding: {
37+
[cfg.orient === 'vertical' ? 'column' : 'row']:
38+
cfg.facet && {title: cfg.facetTitle || cfg.facet, field: 'facet', type: 'nominal'},
39+
[cfg.orient === 'vertical' ? 'row' : 'column']:
40+
{title: 'Gender', field: 'sex', type: 'nominal'},
41+
color: {
42+
field: 'sex',
43+
type: 'nominal',
44+
legend: false,
45+
scale: {range: ['#EA98D2', '#659CCA']}
46+
},
47+
x: {
48+
title: 'Age', field: 'age', type: 'ordinal',
49+
axis: {axisWidth: 0, tickSize: 0},
50+
scale: {bandSize: cfg.bandSize}
51+
},
52+
y: {
53+
title: cfg.valueTitle,
54+
aggregate: cfg.aggregate,
55+
field: cfg.aggregate === 'count' ? '*' : 'value',
56+
type: 'quantitative'
57+
}
58+
}
59+
}
60+
});
61+
};

Diff for: charts/DistrictBar.js

+12-8
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@ const VegaLite = require('./VegaLite');
22

33
const defaults = {
44
data: undefined,
5-
parse: undefined,
6-
calculate: [],
75
filter: undefined,
86
district: undefined,
97
aggregate: undefined,
108
value: undefined,
11-
valueTitle: undefined
9+
valueTitle: undefined,
10+
facet: undefined,
11+
facetTitle: undefined
1212
};
1313

1414
module.exports = ({spec}) => {
@@ -18,22 +18,26 @@ module.exports = ({spec}) => {
1818
spec: {
1919
config: {axis: {characterWidth: 0}},
2020
data: {
21-
url: cfg.data,
22-
format: {parse: cfg.parse}
21+
url: cfg.data
2322
},
2423
transform: {
2524
filter: cfg.filter,
26-
calculate: cfg.calculate
25+
calculate: [
26+
cfg.facet && {field: 'facet', 'expr': cfg.facet},
27+
cfg.district && {field: 'district', 'expr': cfg.district},
28+
cfg.value && {field: 'value', 'expr': cfg.value}
29+
].filter(Boolean)
2730
},
2831
mark: 'bar',
2932
encoding: {
33+
column: cfg.facet && {title: cfg.facetTitle || cfg.facet, field: 'facet', type: 'nominal'},
3034
x: {
31-
title: 'District', field: cfg.district, type: 'ordinal',
35+
title: 'District', field: 'district', type: 'ordinal',
3236
axis: {axisWidth: 0, tickSize: 0, labelAngle: 0}
3337
},
3438
y: {
3539
title: cfg.valueTitle, aggregate: cfg.aggregate,
36-
field: cfg.value, type: 'quantitative'
40+
field: cfg.aggregate === 'count' ? '*' : 'value', type: 'quantitative'
3741
}
3842
}
3943
}

Diff for: index.js

+2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@ const app = express();
55

66
const TYPES = {
77
VegaLite: require('./charts/VegaLite'),
8+
Bar: require('./charts/Bar'),
89
DistrictBar: require('./charts/DistrictBar'),
10+
DemographicBar: require('./charts/DemographicBar'),
911
ZurichMap: require('./charts/ZurichMap')
1012
};
1113

0 commit comments

Comments
 (0)