Projekt

Obecné

Profil

« Předchozí | Další » 

Revize e7b16d72

Přidáno uživatelem Štěpán Červenka před téměř 4 roky(ů)

Re #8775 - Agregovat grafy se stejným typem sensoru

  • fix chart definitions

Zobrazit rozdíly:

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