Projekt

Obecné

Profil

Stáhnout (14 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
          "name": "ranks",
17
          "source": "table",
18
          "transform": [
19
            {
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
              ]
40
            },
41
            {
42
              "type": "formula",
43
              "expr": "datum.rank + 1",
44
              "as": "nextRank"
45
            }
46
          ]
47
        },
48
        {
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
            }
68
          ]
69
        },
70
        {
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
            }
83
          ]
84
        },
85
        {
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
            }
119
          ]
120
        },
121
        {
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
            }
157
          ]
158
        }
159
      ]
160
    }
161
  ],
162
  "marks": [
163
    {
164
      "scales": [
165
        {},
166
        {
167
          "name": "yDetail",
168
          "type": "linear",
169
          "range": [
170
            390,
171
            0
172
          ],
173
          "domain": {
174
            "fields": [
175
              {
176
                "data": "range",
177
                "field": "valueMax"
178
              },
179
              {
180
                "data": "table",
181
                "field": "value"
182
              }
183
            ]
184
          },
185
          "nice": true,
186
          "zero": true
187
        },
188
        {
189
          "name": "color",
190
          "type": "ordinal",
191
          "range": {
192
            "scheme": "category20"
193
          },
194
          "domain": {
195
            "data": "table",
196
            "field": "sensor"
197
          }
198
        }
199
      ],
200
      "legends": [
201
        {
202
          "fill": "color",
203
          "title": "Sensory",
204
          "offset": 0,
205
          "encode": {
206
            "symbols": {
207
              "update": {
208
                "fillOpacity": {"value": 0.5},
209
                "stroke": {"value": "transparent"}
210
              }
211
            }
212
          }
213
        }
214
      ],
215
      "axes": [
216
        {},
217
        {
218
          "orient": "left",
219
          "scale": "yDetail"
220
        }
221
      ],
222
      "marks": [
223
        {
224
          "marks": [
225
            {
226
              "type": "group",
227
              "from": {
228
                "facet": {
229
                  "name": "series",
230
                  "data": "lookup",
231
                  "groupby": "sensor"
232
                }
233
              },
234
              "marks": [
235
                {
236
                  "type": "symbol",
237
                  "from": {
238
                    "data": "series"
239
                  },
240
                  "encode": {
241
                    "update": {
242
                      "shape": {
243
                        "value": "circle"
244
                      },
245
                      "size": {
246
                        "value": 30
247
                      },
248
                      "x": {
249
                        "scale": "xDetail",
250
                        "field": "dateTime"
251
                      },
252
                      "y": {
253
                        "scale": "yDetail",
254
                        "field": "value"
255
                      },
256
                      "color": {
257
                        "value": "both"
258
                      },
259
                      "strokeWidth": {
260
                        "value": 4
261
                      },
262
                      "fill": {
263
                        "scale": "color",
264
                        "field": "sensor"
265
                      }
266
                    }
267
                  }
268
                },
269
                {
270
                  "type": "rule",
271
                  "from": {
272
                    "data": "series"
273
                  },
274
                  "encode": {
275
                    "update": {
276
                      "x": {
277
                        "scale": "xDetail",
278
                        "field": "dateTime"
279
                      },
280
                      "x2": [
281
                        {
282
                          "test": "isValid(datum.obj)",
283
                          "scale": "xDetail",
284
                          "field": "obj.dateTime"
285
                        },
286
                        {
287
                          "scale": "xDetail",
288
                          "field": "dateTime"
289
                        }
290
                      ],
291
                      "y": {
292
                        "scale": "yDetail",
293
                        "field": "value"
294
                      },
295
                      "y2": [
296
                        {
297
                          "test": "isValid(datum.obj)",
298
                          "scale": "yDetail",
299
                          "field": "obj.value"
300
                        },
301
                        {
302
                          "scale": "yDetail",
303
                          "field": "value"
304
                        }
305
                      ],
306
                      "stroke": {
307
                        "scale": "color",
308
                        "field": "sensor"
309
                      },
310
                      "strokeWidth": {
311
                        "value": 1
312
                      }
313
                    }
314
                  }
315
                },
316
                {
317
                  "name": "tooltip-hitarea",
318
                  "type": "rect",
319
                  "interactive": true,
320
                  "from": {
321
                    "data": "tooltip"
322
                  },
323
                  "encode": {
324
                    "enter": {
325
                      "tooltip": {
326
                        "signal": "{title: timeFormat(datum.dateTime, '%A, %e. %B %Y, %X')  ,  '123': datum['123'], '456': datum['456'], '789': datum['789'] }"
327
                      }
328
                    },
329
                    "update": {
330
                      "x": {
331
                        "scale": "xDetail",
332
                        "field": "dateStart"
333
                      },
334
                      "x2": {
335
                        "scale": "xDetail",
336
                        "field": "dateEnd"
337
                      },
338
                      "y": {
339
                        "scale": "yDetail",
340
                        "band": 1
341
                      },
342
                      "y2": {
343
                        "scale": "yDetail",
344
                        "value": 0
345
                      },
346
                      "fill": {
347
                        "value": "#00ff00"
348
                      },
349
                      "fillOpacity": {
350
                        "value": 0.0
351
                      }
352
                    }
353
                  }
354
                },
355
                {
356
                  "type": "rule",
357
                  "interactive": false,
358
                  "zindex": 20,
359
                  "encode": {
360
                    "enter": {},
361
                    "update": {
362
                      "x": {
363
                        "scale": "xDetail",
364
                        "signal": "tooltipSignal.dateTime"
365
                      },
366
                      "y": {
367
                        "scale": "yDetail",
368
                        "band": 1
369
                      },
370
                      "y2": {
371
                        "scale": "yDetail",
372
                        "value": 0
373
                      },
374
                      "strokeOpacity": [
375
                        {
376
                          "test": "tooltipSignal.dateTime > 1",
377
                          "value": 1
378
                        },
379
                        {
380
                          "value": 0
381
                        }
382
                      ]
383
                    }
384
                  }
385
                }
386
              ]
387
            }
388
          ]
389
        }
390
      ]
391
    },
392
    {
393
      "signals": [
394
        {
395
          "value": 0,
396
          "on": [
397
            {},
398
            {
399
              "events": "@overview:mousedown",
400
              "update": "[x(), x()]"
401
            },
402
            {
403
              "events": "[@overview:mousedown, window:mouseup] > window:mousemove!",
404
              "update": "[brush[0], clamp(x(), 0, width)]"
405
            }
406
          ]
407
        }
408
      ],
409
      "scales": [
410
        {},
411
        {},
412
        {
413
          "name": "color",
414
          "type": "ordinal",
415
          "range": {
416
            "scheme": "category20"
417
          },
418
          "domain": {
419
            "data": "table",
420
            "field": "sensor"
421
          }
422
        }
423
      ],
424
      "marks": [
425
        {},
426
        {},
427
        {},
428
        {
429
          "marks": [
430
            {
431
              "type": "group",
432
              "from": {
433
                "facet": {
434
                  "name": "series",
435
                  "data": "lookup",
436
                  "groupby": "sensor"
437
                }
438
              },
439
              "marks": [
440
                {
441
                  "type": "symbol",
442
                  "from": {
443
                    "data": "series"
444
                  },
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
                      }
471
                    }
472
                  }
473
                },
474
                {
475
                  "type": "rule",
476
                  "from": {
477
                    "data": "series"
478
                  },
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
                      }
518
                    }
519
                  }
520
                }
521
              ]
522
            }
523
          ]
524
        }
525
      ]
526
    }
527
  ]
528
}
529

    
(4-4/5)