|
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