|
51 | 51 | { time: 9, value: Math.sin(90 * (Math.PI / 180)) * 5 }
|
52 | 52 | ]
|
53 | 53 |
|
54 |
| - class Normalisation { |
55 |
| - /** |
56 |
| - * number of datasets |
57 |
| - */ |
58 |
| - seriesCount = 0 |
59 |
| - |
60 |
| - /** |
61 |
| - * all datasets |
62 |
| - * { [key: number]: Array<number | null | undefined> } |
63 |
| - */ |
64 |
| - dataHolder = [] |
65 |
| - |
66 |
| - /** |
67 |
| - * add a dataset and normalisation with all other datasets |
68 |
| - */ |
69 |
| - add(set) { |
70 |
| - const serieNr = ++this.seriesCount |
71 |
| - |
72 |
| - // "undefined" means there is no valide value for this point |
73 |
| - if (this.seriesCount > 1) { |
74 |
| - // normalisation of existing datasets |
75 |
| - Object.values(this.dataHolder).forEach((valuesAtTime) => { |
76 |
| - if (valuesAtTime.length !== this.seriesCount) { |
77 |
| - valuesAtTime.splice(serieNr - 1, 0, undefined) |
78 |
| - } |
79 |
| - }) |
80 |
| - } |
81 |
| - set.forEach((p) => { |
82 |
| - const timeToDraw = p.time |
83 |
| - if (this.dataHolder[timeToDraw] === undefined) { |
84 |
| - this.dataHolder[timeToDraw] = [] |
85 |
| - for (let nr = 0; nr < this.seriesCount; nr++) { |
86 |
| - this.dataHolder[timeToDraw][nr] = undefined |
87 |
| - } |
88 |
| - } |
89 |
| - this.dataHolder[timeToDraw][serieNr - 1] = p.value |
90 |
| - }) |
91 |
| - } |
92 |
| - |
93 |
| - /** |
94 |
| - * generate Dataset for uPlot |
95 |
| - */ |
96 |
| - map() { |
97 |
| - /** uPlot.AlignedData */ |
98 |
| - const data = [[]] |
99 |
| - const timeserie = data[0] |
100 |
| - Object.entries(this.dataHolder) |
101 |
| - .sort() |
102 |
| - .forEach(([time, valuesAtTime], i) => { |
103 |
| - const timestamp = Number(time) |
104 |
| - timeserie[i] = timestamp |
105 |
| - valuesAtTime.forEach((valueAtTime, nr) => { |
106 |
| - const dataSetNr = nr + 1 |
107 |
| - if (!data[dataSetNr]) { |
108 |
| - data[dataSetNr] = [] |
109 |
| - } |
110 |
| - data[dataSetNr][i] = valueAtTime |
111 |
| - }) |
112 |
| - }) |
113 |
| - return data |
114 |
| - } |
115 |
| - } |
116 |
| - |
117 | 54 | const opts = {
|
118 | 55 | title: "Lines and stepps -> normalisation of datasets",
|
119 | 56 | width: 800,
|
|
167 | 104 | ],
|
168 | 105 | };
|
169 | 106 |
|
170 |
| - const dataHolder = new Normalisation() |
171 |
| - |
172 |
| - performance.mark('map_start'); |
173 |
| - dataHolder.add(dataset01_s_blue) |
174 |
| - dataHolder.add(dataset02_s_red) |
175 |
| - dataHolder.add(dataset03_l_green) |
176 |
| - dataHolder.add(dataset04_l_yellow) |
177 |
| - dataHolder.add(dataset05_sin) |
178 |
| - const data = dataHolder.map() |
179 |
| - performance.mark('map_end'); |
180 |
| - |
181 |
| - performance.mark('join_start'); |
182 |
| - const data01 = [dataset01_s_blue.map(v => v.time), dataset01_s_blue.map(v => v.value)] |
183 |
| - const data02 = [dataset02_s_red.map(v => v.time), dataset02_s_red.map(v => v.value)] |
184 |
| - const data03 = [dataset03_l_green.map(v => v.time), dataset03_l_green.map(v => v.value)] |
185 |
| - const data04 = [dataset04_l_yellow.map(v => v.time), dataset04_l_yellow.map(v => v.value)] |
186 |
| - const data05 = [dataset05_sin.map(v => v.time), dataset05_sin.map(v => v.value)] |
187 |
| - const dataJoined = uPlot.join([data01, data02, data03, data04, data05]) |
188 |
| - performance.mark('join_end'); |
189 |
| - const r_my = performance.measure("measure map", 'map_start', 'map_end'); |
190 |
| - const r_join = performance.measure("measure join", 'join_start', 'join_end'); |
191 |
| - console.log(r_my, r_join, r_my.duration < r_join.duration ? 'map never wins' : 'join is always faster'); |
| 107 | + const data = uPlot.join([ |
| 108 | + [dataset01_s_blue.map(v => v.time), dataset01_s_blue.map(v => v.value)], |
| 109 | + [dataset02_s_red.map(v => v.time), dataset02_s_red.map(v => v.value)], |
| 110 | + [dataset03_l_green.map(v => v.time), dataset03_l_green.map(v => v.value)], |
| 111 | + [dataset04_l_yellow.map(v => v.time), dataset04_l_yellow.map(v => v.value)], |
| 112 | + [dataset05_sin.map(v => v.time), dataset05_sin.map(v => v.value)] |
| 113 | + ]); |
192 | 114 |
|
193 | 115 | const plot = new uPlot(opts, data, document.body);
|
194 | 116 |
|
|
0 commit comments