Projekt

Obecné

Profil

Stáhnout (13.8 KB) Statistiky
| Větev: | Tag: | Revize:
1
{
2
  "data": [
3
    {},
4
    {
5
      "transform": [
6
        {
7
          "type": "flatten",
8
          "fields": [
9
            {
10
              "signal": "dataPath"
11
            }
12
          ]
13
        }
14
      ]
15
    },
16
    {
17
      "transform": [
18
        {
19
          "type": "project",
20
          "fields": [
21
            {
22
              "signal": "valuePath"
23
            },
24
            {
25
              "signal": "timestampPath"
26
            },
27
            {
28
              "signal": "sensorPath"
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"
64
          ]
65
        },
66
        {
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"
86
          ]
87
        },
88
        {
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"
132
          ]
133
        },
134
        {
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"
159
          ]
160
        },
161
        {
162
          "type": "lookup",
163
          "from": "tooltipTmp2",
164
          "key": "rank",
165
          "fields": [
166
            "prevRank"
167
          ],
168
          "as": [
169
            "prevObj"
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": "{}"
199
        }
200
      ]
201
    }
202
  ],
203
  "marks": [
204
    {
205
      "scales": [
206
        {},
207
        {
208
          "name": "yDetail",
209
          "type": "linear",
210
          "range": [
211
            390,
212
            0
213
          ],
214
          "domain": {
215
            "fields": [
216
              {
217
                "data": "range",
218
                "field": "valueMax"
219
              },
220
              {
221
                "data": "table",
222
                "field": "value"
223
              }
224
            ]
225
          },
226
          "nice": true,
227
          "zero": true
228
        },
229
        {
230
          "name": "color",
231
          "type": "ordinal",
232
          "range": {
233
            "scheme": "category20"
234
          },
235
          "domain": {
236
            "data": "table",
237
            "field": "sensor"
238
          }
239
        }
240
      ],
241
      "legends": [
242
        {
243
          "fill": "color",
244
          "title": "Sensory",
245
          "offset": 0,
246
          "encode": {
247
            "symbols": {
248
              "update": {
249
                "fillOpacity": {
250
                  "value": 0.5
251
                },
252
                "stroke": {
253
                  "value": "transparent"
254
                }
255
              }
256
            }
257
          }
258
        }
259
      ],
260
      "axes": [
261
        {},
262
        {
263
          "orient": "left",
264
          "scale": "yDetail"
265
        }
266
      ],
267
      "marks": [
268
        {
269
          "marks": [
270
            {
271
              "type": "group",
272
              "from": {
273
                "facet": {
274
                  "name": "series",
275
                  "data": "lookup",
276
                  "groupby": "sensor"
277
                }
278
              },
279
              "marks": [
280
                {
281
                  "type": "symbol",
282
                  "from": {
283
                    "data": "series"
284
                  },
285
                  "encode": {
286
                    "update": {
287
                      "shape": {
288
                        "value": "circle"
289
                      },
290
                      "size": {
291
                        "value": 30
292
                      },
293
                      "x": {
294
                        "scale": "xDetail",
295
                        "field": "dateTime"
296
                      },
297
                      "y": {
298
                        "scale": "yDetail",
299
                        "field": "value"
300
                      },
301
                      "color": {
302
                        "value": "both"
303
                      },
304
                      "strokeWidth": {
305
                        "value": 4
306
                      },
307
                      "fill": {
308
                        "scale": "color",
309
                        "field": "sensor"
310
                      }
311
                    }
312
                  }
313
                },
314
                {
315
                  "type": "rule",
316
                  "from": {
317
                    "data": "series"
318
                  },
319
                  "encode": {
320
                    "update": {
321
                      "x": {
322
                        "scale": "xDetail",
323
                        "field": "dateTime"
324
                      },
325
                      "x2": [
326
                        {
327
                          "test": "isValid(datum.obj)",
328
                          "scale": "xDetail",
329
                          "field": "obj.dateTime"
330
                        },
331
                        {
332
                          "scale": "xDetail",
333
                          "field": "dateTime"
334
                        }
335
                      ],
336
                      "y": {
337
                        "scale": "yDetail",
338
                        "field": "value"
339
                      },
340
                      "y2": [
341
                        {
342
                          "test": "isValid(datum.obj)",
343
                          "scale": "yDetail",
344
                          "field": "obj.value"
345
                        },
346
                        {
347
                          "scale": "yDetail",
348
                          "field": "value"
349
                        }
350
                      ],
351
                      "stroke": {
352
                        "scale": "color",
353
                        "field": "sensor"
354
                      },
355
                      "strokeWidth": {
356
                        "value": 1
357
                      }
358
                    }
359
                  }
360
                },
361
                {
362
                  "name": "tooltip-hitarea",
363
                  "type": "rect",
364
                  "interactive": true,
365
                  "from": {
366
                    "data": "tooltip"
367
                  },
368
                  "encode": {
369
                    "enter": {
370
                      "tooltip": {
371
                        "signal": "{title: timeFormat(datum.dateTime, '%A, %e. %B %Y, %X')  ,  '123': datum['123'], '456': datum['456'], '789': datum['789'] }"
372
                      }
373
                    },
374
                    "update": {
375
                      "x": {
376
                        "scale": "xDetail",
377
                        "field": "dateStart"
378
                      },
379
                      "x2": {
380
                        "scale": "xDetail",
381
                        "field": "dateEnd"
382
                      },
383
                      "y": {
384
                        "scale": "yDetail",
385
                        "band": 1
386
                      },
387
                      "y2": {
388
                        "scale": "yDetail",
389
                        "value": 0
390
                      },
391
                      "fill": {
392
                        "value": "#00ff00"
393
                      },
394
                      "fillOpacity": {
395
                        "value": 0.0
396
                      }
397
                    }
398
                  }
399
                },
400
                {
401
                  "type": "rule",
402
                  "interactive": false,
403
                  "zindex": 20,
404
                  "encode": {
405
                    "enter": {
406
                    },
407
                    "update": {
408
                      "x": {
409
                        "scale": "xDetail",
410
                        "signal": "tooltipSignal.dateTime"
411
                      },
412
                      "y": {
413
                        "scale": "yDetail",
414
                        "band": 1
415
                      },
416
                      "y2": {
417
                        "scale": "yDetail",
418
                        "value": 0
419
                      },
420
                      "strokeOpacity": [
421
                        {
422
                          "test": "tooltipSignal.dateTime > 1",
423
                          "value": 1
424
                        },
425
                        {
426
                          "value": 0
427
                        }
428
                      ]
429
                    }
430
                  }
431
                }
432
              ]
433
            }
434
          ]
435
        }
436
      ]
437
    },
438
    {
439
      "signals": [
440
        {
441
          "value": 0,
442
          "on": [
443
            {},
444
            {
445
              "events": "@overview:mousedown",
446
              "update": "[x(), x()]"
447
            },
448
            {
449
              "events": "[@overview:mousedown, window:mouseup] > window:mousemove!",
450
              "update": "[brush[0], clamp(x(), 0, width)]"
451
            }
452
          ]
453
        }
454
      ],
455
      "scales": [
456
        {},
457
        {},
458
        {
459
          "name": "color",
460
          "type": "ordinal",
461
          "range": {
462
            "scheme": "category20"
463
          },
464
          "domain": {
465
            "data": "table",
466
            "field": "sensor"
467
          }
468
        }
469
      ],
470
      "marks": [
471
        {},
472
        {},
473
        {},
474
        {
475
          "type": "group",
476
          "from": {
477
            "facet": {
478
              "name": "series",
479
              "data": "lookup",
480
              "groupby": "sensor"
481
            }
482
          },
483
          "marks": [
484
            {
485
              "type": "symbol",
486
              "from": {
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
                  }
515
                }
516
              }
517
            },
518
            {
519
              "type": "rule",
520
              "from": {
521
                "data": "series"
522
              },
523
              "encode": {
524
                "update": {
525
                  "x": {
526
                    "scale": "xOverview",
527
                    "field": "dateTime"
528
                  },
529
                  "x2": [
530
                    {
531
                      "test": "isValid(datum.obj)",
532
                      "scale": "xOverview",
533
                      "field": "obj.dateTime"
534
                    },
535
                    {
536
                      "scale": "xOverview",
537
                      "field": "dateTime"
538
                    }
539
                  ],
540
                  "y": {
541
                    "scale": "yOverview",
542
                    "field": "value"
543
                  },
544
                  "y2": [
545
                    {
546
                      "test": "isValid(datum.obj)",
547
                      "scale": "yOverview",
548
                      "field": "obj.value"
549
                    },
550
                    {
551
                      "scale": "yOverview",
552
                      "field": "value"
553
                    }
554
                  ],
555
                  "stroke": {
556
                    "scale": "color",
557
                    "field": "sensor"
558
                  },
559
                  "strokeWidth": {
560
                    "value": 1
561
                  }
562
                }
563
              }
564
            }
565
          ]
566
        }
567
      ]
568
    }
569
  ]
570
}
571

    
(4-4/5)