Revize e7b16d72
Přidáno uživatelem Štěpán Červenka před téměř 4 roky(ů)
src/vega/body/multilinechart.json | ||
---|---|---|
10 | 10 |
"signal": "dataPath" |
11 | 11 |
} |
12 | 12 |
] |
13 |
}, |
|
14 |
{}, |
|
13 |
} |
|
14 |
] |
|
15 |
}, |
|
16 |
{ |
|
17 |
"transform": [ |
|
15 | 18 |
{ |
16 |
"name": "ranks", |
|
17 |
"source": "table", |
|
18 |
"transform": [ |
|
19 |
"type": "project", |
|
20 |
"fields": [ |
|
19 | 21 |
{ |
20 |
"type": "window", |
|
21 |
"sort": { |
|
22 |
"field": [ |
|
23 |
"sensor", |
|
24 |
"dateTime" |
|
25 |
], |
|
26 |
"order": [ |
|
27 |
"ascending", |
|
28 |
"ascending" |
|
29 |
] |
|
30 |
}, |
|
31 |
"ops": [ |
|
32 |
"rank" |
|
33 |
], |
|
34 |
"fields": [ |
|
35 |
"value" |
|
36 |
], |
|
37 |
"as": [ |
|
38 |
"rank" |
|
39 |
] |
|
22 |
"signal": "valuePath" |
|
40 | 23 |
}, |
41 | 24 |
{ |
42 |
"type": "formula", |
|
43 |
"expr": "datum.rank + 1", |
|
44 |
"as": "nextRank" |
|
25 |
"signal": "timestampPath" |
|
26 |
}, |
|
27 |
{ |
|
28 |
"signal": "sensorPath" |
|
45 | 29 |
} |
30 |
], |
|
31 |
"as": [ |
|
32 |
"value", |
|
33 |
"timestamp", |
|
34 |
"sensor" |
|
35 |
] |
|
36 |
} |
|
37 |
] |
|
38 |
}, |
|
39 |
{}, |
|
40 |
{ |
|
41 |
"name": "ranks", |
|
42 |
"source": "table", |
|
43 |
"transform": [ |
|
44 |
{ |
|
45 |
"type": "window", |
|
46 |
"sort": { |
|
47 |
"field": [ |
|
48 |
"sensor", |
|
49 |
"dateTime" |
|
50 |
], |
|
51 |
"order": [ |
|
52 |
"ascending", |
|
53 |
"ascending" |
|
54 |
] |
|
55 |
}, |
|
56 |
"ops": [ |
|
57 |
"rank" |
|
58 |
], |
|
59 |
"fields": [ |
|
60 |
"value" |
|
61 |
], |
|
62 |
"as": [ |
|
63 |
"rank" |
|
46 | 64 |
] |
47 | 65 |
}, |
48 | 66 |
{ |
49 |
"name": "lookup",
|
|
50 |
"source": "ranks",
|
|
51 |
"transform": [
|
|
52 |
{
|
|
53 |
"type": "lookup",
|
|
54 |
"from": "ranks",
|
|
55 |
"key": "rank",
|
|
56 |
"fields": [
|
|
57 |
"nextRank"
|
|
58 |
],
|
|
59 |
"as": [
|
|
60 |
"tempObj"
|
|
61 |
]
|
|
62 |
},
|
|
63 |
{
|
|
64 |
"type": "formula",
|
|
65 |
"expr": "(datum.tempObj == null || datum.tempObj.sensor != datum.sensor || datum.tempObj.dateTime - datum.dateTime > maxTimeDifference) ? null : datum.tempObj",
|
|
66 |
"as": "obj"
|
|
67 |
}
|
|
67 |
"type": "formula",
|
|
68 |
"expr": "datum.rank + 1",
|
|
69 |
"as": "nextRank"
|
|
70 |
}
|
|
71 |
]
|
|
72 |
},
|
|
73 |
{
|
|
74 |
"name": "lookup",
|
|
75 |
"source": "ranks",
|
|
76 |
"transform": [
|
|
77 |
{
|
|
78 |
"type": "lookup",
|
|
79 |
"from": "ranks",
|
|
80 |
"key": "rank",
|
|
81 |
"fields": [
|
|
82 |
"nextRank"
|
|
83 |
],
|
|
84 |
"as": [
|
|
85 |
"tempObj"
|
|
68 | 86 |
] |
69 | 87 |
}, |
70 | 88 |
{ |
71 |
"name": "tooltipTmp1", |
|
72 |
"source": "lookup", |
|
73 |
"transform": [ |
|
74 |
{ |
|
75 |
"type": "pivot", |
|
76 |
"groupby": [ |
|
77 |
"dateTime" |
|
78 |
], |
|
79 |
"field": "sensor", |
|
80 |
"value": "value", |
|
81 |
"op": "median" |
|
82 |
} |
|
89 |
"type": "formula", |
|
90 |
"expr": "(datum.tempObj == null || datum.tempObj.sensor != datum.sensor || datum.tempObj.dateTime - datum.dateTime > maxTimeDifference) ? null : datum.tempObj", |
|
91 |
"as": "obj" |
|
92 |
} |
|
93 |
] |
|
94 |
}, |
|
95 |
{ |
|
96 |
"name": "tooltipTmp1", |
|
97 |
"source": "lookup", |
|
98 |
"transform": [ |
|
99 |
{ |
|
100 |
"type": "pivot", |
|
101 |
"groupby": [ |
|
102 |
"dateTime" |
|
103 |
], |
|
104 |
"field": "sensor", |
|
105 |
"value": "value", |
|
106 |
"op": "median" |
|
107 |
} |
|
108 |
] |
|
109 |
}, |
|
110 |
{ |
|
111 |
"name": "tooltipTmp2", |
|
112 |
"source": "tooltipTmp1", |
|
113 |
"transform": [ |
|
114 |
{ |
|
115 |
"type": "window", |
|
116 |
"sort": { |
|
117 |
"field": [ |
|
118 |
"dateTime" |
|
119 |
], |
|
120 |
"order": [ |
|
121 |
"ascending" |
|
122 |
] |
|
123 |
}, |
|
124 |
"ops": [ |
|
125 |
"rank" |
|
126 |
], |
|
127 |
"fields": [ |
|
128 |
"value" |
|
129 |
], |
|
130 |
"as": [ |
|
131 |
"rank" |
|
83 | 132 |
] |
84 | 133 |
}, |
85 | 134 |
{ |
86 |
"name": "tooltipTmp2", |
|
87 |
"source": "tooltipTmp1", |
|
88 |
"transform": [ |
|
89 |
{ |
|
90 |
"type": "window", |
|
91 |
"sort": { |
|
92 |
"field": [ |
|
93 |
"dateTime" |
|
94 |
], |
|
95 |
"order": [ |
|
96 |
"ascending" |
|
97 |
] |
|
98 |
}, |
|
99 |
"ops": [ |
|
100 |
"rank" |
|
101 |
], |
|
102 |
"fields": [ |
|
103 |
"value" |
|
104 |
], |
|
105 |
"as": [ |
|
106 |
"rank" |
|
107 |
] |
|
108 |
}, |
|
109 |
{ |
|
110 |
"type": "formula", |
|
111 |
"expr": "datum.rank - 1", |
|
112 |
"as": "prevRank" |
|
113 |
}, |
|
114 |
{ |
|
115 |
"type": "formula", |
|
116 |
"expr": "datum.rank + 1", |
|
117 |
"as": "nextRank" |
|
118 |
} |
|
135 |
"type": "formula", |
|
136 |
"expr": "datum.rank - 1", |
|
137 |
"as": "prevRank" |
|
138 |
}, |
|
139 |
{ |
|
140 |
"type": "formula", |
|
141 |
"expr": "datum.rank + 1", |
|
142 |
"as": "nextRank" |
|
143 |
} |
|
144 |
] |
|
145 |
}, |
|
146 |
{ |
|
147 |
"name": "tooltip", |
|
148 |
"source": "tooltipTmp2", |
|
149 |
"transform": [ |
|
150 |
{ |
|
151 |
"type": "lookup", |
|
152 |
"from": "tooltipTmp2", |
|
153 |
"key": "rank", |
|
154 |
"fields": [ |
|
155 |
"nextRank" |
|
156 |
], |
|
157 |
"as": [ |
|
158 |
"nextObj" |
|
119 | 159 |
] |
120 | 160 |
}, |
121 | 161 |
{ |
122 |
"name": "tooltip", |
|
123 |
"source": "tooltipTmp2", |
|
124 |
"transform": [ |
|
125 |
{ |
|
126 |
"type": "lookup", |
|
127 |
"from": "tooltipTmp2", |
|
128 |
"key": "rank", |
|
129 |
"fields": [ |
|
130 |
"nextRank" |
|
131 |
], |
|
132 |
"as": [ |
|
133 |
"nextObj" |
|
134 |
] |
|
135 |
}, |
|
136 |
{ |
|
137 |
"type": "lookup", |
|
138 |
"from": "tooltipTmp2", |
|
139 |
"key": "rank", |
|
140 |
"fields": [ |
|
141 |
"prevRank" |
|
142 |
], |
|
143 |
"as": [ |
|
144 |
"prevObj" |
|
145 |
] |
|
146 |
}, |
|
147 |
{ |
|
148 |
"type": "formula", |
|
149 |
"expr": "datum.prevObj == null ? data('range')[0].dateMin : (time(datum.prevObj.dateTime) + time(datum.dateTime)) / 2", |
|
150 |
"as": "dateStart" |
|
151 |
}, |
|
152 |
{ |
|
153 |
"type": "formula", |
|
154 |
"expr": "datum.nextObj == null ? data('range')[0].dateMax : (time(datum.nextObj.dateTime) + time(datum.dateTime)) / 2", |
|
155 |
"as": "dateEnd" |
|
156 |
} |
|
162 |
"type": "lookup", |
|
163 |
"from": "tooltipTmp2", |
|
164 |
"key": "rank", |
|
165 |
"fields": [ |
|
166 |
"prevRank" |
|
167 |
], |
|
168 |
"as": [ |
|
169 |
"prevObj" |
|
157 | 170 |
] |
171 |
}, |
|
172 |
{ |
|
173 |
"type": "formula", |
|
174 |
"expr": "datum.prevObj == null ? data('range')[0].dateMin : (time(datum.prevObj.dateTime) + time(datum.dateTime)) / 2", |
|
175 |
"as": "dateStart" |
|
176 |
}, |
|
177 |
{ |
|
178 |
"type": "formula", |
|
179 |
"expr": "datum.nextObj == null ? data('range')[0].dateMax : (time(datum.nextObj.dateTime) + time(datum.dateTime)) / 2", |
|
180 |
"as": "dateEnd" |
|
181 |
} |
|
182 |
] |
|
183 |
} |
|
184 |
], |
|
185 |
"signals": [ |
|
186 |
{}, |
|
187 |
{}, |
|
188 |
{ |
|
189 |
"name": "tooltipSignal", |
|
190 |
"value": {}, |
|
191 |
"on": [ |
|
192 |
{ |
|
193 |
"events": "@tooltip-hitarea:mouseover", |
|
194 |
"update": "datum" |
|
195 |
}, |
|
196 |
{ |
|
197 |
"events": "@tooltip-hitarea:mouseout", |
|
198 |
"update": "{}" |
|
158 | 199 |
} |
159 | 200 |
] |
160 | 201 |
} |
... | ... | |
205 | 246 |
"encode": { |
206 | 247 |
"symbols": { |
207 | 248 |
"update": { |
208 |
"fillOpacity": {"value": 0.5}, |
|
209 |
"stroke": {"value": "transparent"} |
|
249 |
"fillOpacity": { |
|
250 |
"value": 0.5 |
|
251 |
}, |
|
252 |
"stroke": { |
|
253 |
"value": "transparent" |
|
254 |
} |
|
210 | 255 |
} |
211 | 256 |
} |
212 | 257 |
} |
... | ... | |
357 | 402 |
"interactive": false, |
358 | 403 |
"zindex": 20, |
359 | 404 |
"encode": { |
360 |
"enter": {}, |
|
405 |
"enter": { |
|
406 |
}, |
|
361 | 407 |
"update": { |
362 | 408 |
"x": { |
363 | 409 |
"scale": "xDetail", |
... | ... | |
426 | 472 |
{}, |
427 | 473 |
{}, |
428 | 474 |
{ |
475 |
"type": "group", |
|
476 |
"from": { |
|
477 |
"facet": { |
|
478 |
"name": "series", |
|
479 |
"data": "lookup", |
|
480 |
"groupby": "sensor" |
|
481 |
} |
|
482 |
}, |
|
429 | 483 |
"marks": [ |
430 | 484 |
{ |
431 |
"type": "group",
|
|
485 |
"type": "symbol",
|
|
432 | 486 |
"from": { |
433 |
"facet": { |
|
434 |
"name": "series", |
|
435 |
"data": "lookup", |
|
436 |
"groupby": "sensor" |
|
487 |
"data": "series" |
|
488 |
}, |
|
489 |
"encode": { |
|
490 |
"update": { |
|
491 |
"shape": { |
|
492 |
"value": "circle" |
|
493 |
}, |
|
494 |
"size": { |
|
495 |
"value": 30 |
|
496 |
}, |
|
497 |
"x": { |
|
498 |
"scale": "xOverview", |
|
499 |
"field": "dateTime" |
|
500 |
}, |
|
501 |
"y": { |
|
502 |
"scale": "yOverview", |
|
503 |
"field": "value" |
|
504 |
}, |
|
505 |
"color": { |
|
506 |
"value": "both" |
|
507 |
}, |
|
508 |
"strokeWidth": { |
|
509 |
"value": 4 |
|
510 |
}, |
|
511 |
"fill": { |
|
512 |
"scale": "color", |
|
513 |
"field": "sensor" |
|
514 |
} |
|
437 | 515 |
} |
516 |
} |
|
517 |
}, |
|
518 |
{ |
|
519 |
"type": "rule", |
|
520 |
"from": { |
|
521 |
"data": "series" |
|
438 | 522 |
}, |
439 |
"marks": [
|
|
440 |
{ |
|
441 |
"type": "symbol",
|
|
442 |
"from": {
|
|
443 |
"data": "series"
|
|
523 |
"encode": {
|
|
524 |
"update": {
|
|
525 |
"x": {
|
|
526 |
"scale": "xOverview",
|
|
527 |
"field": "dateTime"
|
|
444 | 528 |
}, |
445 |
"encode": { |
|
446 |
"update": { |
|
447 |
"shape": { |
|
448 |
"value": "circle" |
|
449 |
}, |
|
450 |
"size": { |
|
451 |
"value": 30 |
|
452 |
}, |
|
453 |
"x": { |
|
454 |
"scale": "xOverview", |
|
455 |
"field": "dateTime" |
|
456 |
}, |
|
457 |
"y": { |
|
458 |
"scale": "yOverview", |
|
459 |
"field": "value" |
|
460 |
}, |
|
461 |
"color": { |
|
462 |
"value": "both" |
|
463 |
}, |
|
464 |
"strokeWidth": { |
|
465 |
"value": 4 |
|
466 |
}, |
|
467 |
"fill": { |
|
468 |
"scale": "color", |
|
469 |
"field": "sensor" |
|
470 |
} |
|
529 |
"x2": [ |
|
530 |
{ |
|
531 |
"test": "isValid(datum.obj)", |
|
532 |
"scale": "xOverview", |
|
533 |
"field": "obj.dateTime" |
|
534 |
}, |
|
535 |
{ |
|
536 |
"scale": "xOverview", |
|
537 |
"field": "dateTime" |
|
471 | 538 |
} |
472 |
} |
|
473 |
}, |
|
474 |
{ |
|
475 |
"type": "rule", |
|
476 |
"from": { |
|
477 |
"data": "series" |
|
539 |
], |
|
540 |
"y": { |
|
541 |
"scale": "yOverview", |
|
542 |
"field": "value" |
|
478 | 543 |
}, |
479 |
"encode": { |
|
480 |
"update": { |
|
481 |
"x": { |
|
482 |
"scale": "xOverview", |
|
483 |
"field": "dateTime" |
|
484 |
}, |
|
485 |
"x2": [ |
|
486 |
{ |
|
487 |
"test": "isValid(datum.obj)", |
|
488 |
"scale": "xOverview", |
|
489 |
"field": "obj.dateTime" |
|
490 |
}, |
|
491 |
{ |
|
492 |
"scale": "xOverview", |
|
493 |
"field": "dateTime" |
|
494 |
} |
|
495 |
], |
|
496 |
"y": { |
|
497 |
"scale": "yOverview", |
|
498 |
"field": "value" |
|
499 |
}, |
|
500 |
"y2": [ |
|
501 |
{ |
|
502 |
"test": "isValid(datum.obj)", |
|
503 |
"scale": "yOverview", |
|
504 |
"field": "obj.value" |
|
505 |
}, |
|
506 |
{ |
|
507 |
"scale": "yOverview", |
|
508 |
"field": "value" |
|
509 |
} |
|
510 |
], |
|
511 |
"stroke": { |
|
512 |
"scale": "color", |
|
513 |
"field": "sensor" |
|
514 |
}, |
|
515 |
"strokeWidth": { |
|
516 |
"value": 1 |
|
517 |
} |
|
544 |
"y2": [ |
|
545 |
{ |
|
546 |
"test": "isValid(datum.obj)", |
|
547 |
"scale": "yOverview", |
|
548 |
"field": "obj.value" |
|
549 |
}, |
|
550 |
{ |
|
551 |
"scale": "yOverview", |
|
552 |
"field": "value" |
|
518 | 553 |
} |
554 |
], |
|
555 |
"stroke": { |
|
556 |
"scale": "color", |
|
557 |
"field": "sensor" |
|
558 |
}, |
|
559 |
"strokeWidth": { |
|
560 |
"value": 1 |
|
519 | 561 |
} |
520 | 562 |
} |
521 |
]
|
|
563 |
}
|
|
522 | 564 |
} |
523 | 565 |
] |
524 | 566 |
} |
Také k dispozici: Unified diff
Re #8775 - Agregovat grafy se stejným typem sensoru