@@ -24,6 +24,37 @@ const formatAxisLabel = (value: string): string => {
2424 return isNaN ( num ) ? value : num . toFixed ( 3 ) ;
2525} ;
2626
27+ function hasDayBreak ( data : string [ ] ) {
28+ const first = new Date ( data [ 0 ] ) ;
29+ const last = new Date ( data . at ( - 1 ) || data [ 0 ] ) ;
30+ return ! isNaN ( first . getDay ( ) ) && first . getDay ( ) != last . getDay ( ) ;
31+ }
32+
33+ function formatTime ( timestamp : string ) {
34+ const date = new Date ( timestamp ) ;
35+ const h = date . getHours ( ) ;
36+ const m = date . getMinutes ( ) ;
37+ const s = date . getSeconds ( ) ;
38+ return `${ h } :${ m } :${ s } ` ;
39+ }
40+
41+ function formatDateTime ( timestamp : string ) {
42+ const date = new Date ( timestamp ) ;
43+ const year = date . getFullYear ( ) ;
44+ const month = date . getMonth ( ) ;
45+ const day = date . getDate ( ) ;
46+ const time = formatTime ( timestamp ) ;
47+ return `${ year } -${ month } -${ day } ${ time } ` ;
48+ }
49+
50+ function timeAxisProps ( data : string [ ] ) {
51+ return {
52+ axisLabel : {
53+ formatter : hasDayBreak ( data ) ? formatDateTime : formatTime ,
54+ } ,
55+ } ;
56+ }
57+
2758function updateVisualMap ( chart : ECharts , selectedChannelName : string | undefined ) {
2859 const opt = chart . getOption ( ) ;
2960
@@ -59,7 +90,7 @@ function updateVisualMap(chart: ECharts, selectedChannelName: string | undefined
5990const ResultChannelPlot = ( {
6091 experimentData,
6192 loading,
62- title,
93+ title : titleText ,
6394 subtitle,
6495 channelNames,
6596 repetitions = 1 ,
@@ -114,12 +145,23 @@ const ResultChannelPlot = ({
114145 scale : true ,
115146 boundaryGap : [ "1%" , "1%" ] ,
116147 } ;
148+ const title = {
149+ text : titleText ,
150+ left : "center" ,
151+ subtext : subtitle ,
152+ subtextStyle : {
153+ lineHeight : 0 ,
154+ } ,
155+ top : "-1%" ,
156+ } ;
117157 let chartSeries : EChartsOption [ "series" ] = [ ] ;
158+ const nOrdinaryParameters =
159+ scanParameters . length -
160+ scanParameters . reduce ( ( total , param ) => ( param . realtime ? total + 1 : total ) , 0 ) ;
118161
119- if ( scanParameters . length === 0 && timestampEntry ) {
120- xAxis . type = "time" ;
121- xAxis . name = "Time" ;
162+ if ( nOrdinaryParameters === 0 && timestampEntry ) {
122163 xAxisData = timestampEntry . scanValues as string [ ] ;
164+ Object . assign ( xAxis , { type : "time" , name : "Time" , ...timeAxisProps ( xAxisData ) } ) ;
123165
124166 const fullDataSet = xAxisData . map ( ( xVal , index ) => [
125167 xVal ,
@@ -150,18 +192,44 @@ const ResultChannelPlot = ({
150192 ) ;
151193 } else if ( scanParameters . length === 2 ) {
152194 const [ xScan , yScan ] = scanParameters ;
195+ const xScanValues =
196+ xScan . realtime && timestampEntry
197+ ? timestampEntry . scanValues
198+ : xScan . scan_values ;
199+ const yScanValues =
200+ yScan . realtime && timestampEntry
201+ ? timestampEntry . scanValues
202+ : yScan . scan_values ;
153203 const series = [ ] ;
154204
155205 for ( const resultChannel of resultChannels ) {
156206 const data : [ number | string , number | string , number ] [ ] = [ ] ;
157- for ( let i = 0 ; i < xScan . scan_values . length ; i ++ ) {
158- for ( let j = 0 ; j < yScan . scan_values . length ; j ++ ) {
207+ if ( xScan . realtime ) {
208+ for ( let i = 0 ; i < xScanValues . length ; i ++ ) {
159209 data . push ( [
160- xScan . scan_values [ i ] ,
161- yScan . scan_values [ j ] ,
162- resultChannel . data [ i * yScan . scan_values . length + j ] ,
210+ xScanValues [ Math . floor ( i / yScanValues . length ) ] ,
211+ yScanValues [ i % yScanValues . length ] ,
212+ resultChannel . data [ i ] ,
163213 ] ) ;
164214 }
215+ } else if ( yScan . realtime ) {
216+ for ( let i = 0 ; i < yScanValues . length ; i ++ ) {
217+ data . push ( [
218+ xScanValues [ i % xScanValues . length ] ,
219+ yScanValues [ Math . floor ( i / xScanValues . length ) ] ,
220+ resultChannel . data [ i ] ,
221+ ] ) ;
222+ }
223+ } else {
224+ for ( let i = 0 ; i < xScanValues . length ; i ++ ) {
225+ for ( let j = 0 ; j < yScanValues . length ; j ++ ) {
226+ data . push ( [
227+ xScanValues [ i ] ,
228+ yScanValues [ j ] ,
229+ resultChannel . data [ i * yScanValues . length + j ] ,
230+ ] ) ;
231+ }
232+ }
165233 }
166234
167235 series . push ( {
@@ -173,16 +241,12 @@ const ResultChannelPlot = ({
173241 } ) ;
174242 }
175243
244+ const categoryAxisProps = {
245+ axisLabel : { formatter : formatAxisLabel } ,
246+ } ;
247+
176248 return {
177- title : {
178- text : title ,
179- left : "center" ,
180- subtext : subtitle ,
181- subtextStyle : {
182- lineHeight : 0 ,
183- } ,
184- top : "-1%" ,
185- } ,
249+ title,
186250 legend : {
187251 selectedMode : "single" ,
188252 left : "right" ,
@@ -197,18 +261,22 @@ const ResultChannelPlot = ({
197261 } ,
198262 tooltip : { } ,
199263 xAxis : {
200- type : "category" ,
201- axisLabel : { formatter : formatAxisLabel } ,
202264 name : xScan . variable_id ,
265+ type : "category" ,
203266 nameLocation : "middle" ,
204267 nameGap : 25 ,
268+ ...( xScan . realtime
269+ ? timeAxisProps ( xScanValues as string [ ] )
270+ : categoryAxisProps ) ,
205271 } ,
206272 yAxis : {
207- type : "category" ,
208- axisLabel : { formatter : formatAxisLabel } ,
209273 name : yScan . variable_id ,
274+ type : "category" ,
210275 nameLocation : "middle" ,
211276 nameGap : 45 ,
277+ ...( yScan . realtime
278+ ? timeAxisProps ( yScanValues as string [ ] )
279+ : categoryAxisProps ) ,
212280 } ,
213281 series,
214282 visualMap : {
@@ -220,15 +288,7 @@ const ResultChannelPlot = ({
220288 }
221289
222290 return {
223- title : {
224- text : title ,
225- left : "center" ,
226- subtext : subtitle ,
227- subtextStyle : {
228- lineHeight : 0 ,
229- } ,
230- top : "-1%" ,
231- } ,
291+ title,
232292 textStyle : { fontFamily : "sans-serif" , fontSize : 12 } ,
233293 tooltip : { trigger : "axis" } ,
234294 toolbox : {
@@ -259,7 +319,14 @@ const ResultChannelPlot = ({
259319 yAxis,
260320 series : chartSeries ,
261321 } ;
262- } , [ experimentData , title , subtitle , scanParameters , repetitions , showRepetitions ] ) ;
322+ } , [
323+ experimentData ,
324+ titleText ,
325+ subtitle ,
326+ scanParameters ,
327+ repetitions ,
328+ showRepetitions ,
329+ ] ) ;
263330
264331 const updateChart = useCallback (
265332 ( chart : ECharts ) => {
0 commit comments