@@ -30,6 +30,7 @@ public class GraphViewModel : INotifyPropertyChanged
3030 private static readonly string FloatFormat = "0.000" ;
3131 private static readonly int MaxSeriesCount = 4 ;
3232 private static readonly string DefaultSeries2Suffix = " 2" ;
33+ private static readonly int MetricsPrecision = 3 ;
3334
3435 // Y-Axis position options for each series
3536 public static readonly string YAxisLeft = "Left" ;
@@ -862,35 +863,57 @@ private static ObservableCollection<SeriesMetrics> CalculateSeriesMetrics(
862863
863864 if ( points . Any ( ) )
864865 {
865- var values = points . Select ( p => p . Value ?? 0.0 ) . ToList ( ) ;
866+ // Filter out null values to avoid skewing statistics
867+ var values = points
868+ . Where ( p => p . Value . HasValue )
869+ . Select ( p => p . Value . Value )
870+ . ToList ( ) ;
866871 var timestamps = points . Select ( p => p . DateTime ) . ToList ( ) ;
867872
868- var count = values . Count ;
869- var min = values . Min ( ) ;
870- var max = values . Max ( ) ;
871- var mean = values . Average ( ) ;
872-
873- // Calculate median
874- var sortedValues = values . OrderBy ( v => v ) . ToList ( ) ;
875- var mid = sortedValues . Count / 2 ;
876- var median = ( sortedValues . Count % 2 == 0 )
877- ? ( sortedValues [ mid - 1 ] + sortedValues [ mid ] ) / 2.0
878- : sortedValues [ mid ] ;
879-
880- var rangeStart = timestamps . Min ( ) ;
881- var rangeEnd = timestamps . Max ( ) ;
882-
883- var metrics = new SeriesMetrics (
884- lineSeries . Name ?? "Unknown" ,
885- count ,
886- min ,
887- max ,
888- Math . Round ( mean , 3 ) ,
889- Math . Round ( median , 3 ) ,
890- rangeStart ,
891- rangeEnd ) ;
892-
893- metricsList . Add ( metrics ) ;
873+ if ( values . Any ( ) )
874+ {
875+ var count = values . Count ;
876+ var min = values . Min ( ) ;
877+ var max = values . Max ( ) ;
878+ var mean = values . Average ( ) ;
879+
880+ // Calculate median
881+ var sortedValues = values . OrderBy ( v => v ) . ToList ( ) ;
882+ var mid = sortedValues . Count / 2 ;
883+ var median = ( sortedValues . Count % 2 == 0 )
884+ ? ( sortedValues [ mid - 1 ] + sortedValues [ mid ] ) / 2.0
885+ : sortedValues [ mid ] ;
886+
887+ var rangeStart = timestamps . Min ( ) ;
888+ var rangeEnd = timestamps . Max ( ) ;
889+
890+ var metrics = new SeriesMetrics (
891+ lineSeries . Name ?? "Unknown" ,
892+ count ,
893+ min ,
894+ max ,
895+ Math . Round ( mean , MetricsPrecision ) ,
896+ Math . Round ( median , MetricsPrecision ) ,
897+ rangeStart ,
898+ rangeEnd ) ;
899+
900+ metricsList . Add ( metrics ) ;
901+ }
902+ else
903+ {
904+ // All values were null
905+ var metrics = new SeriesMetrics (
906+ lineSeries . Name ?? "Unknown" ,
907+ 0 ,
908+ null ,
909+ null ,
910+ null ,
911+ null ,
912+ null ,
913+ null ) ;
914+
915+ metricsList . Add ( metrics ) ;
916+ }
894917 }
895918 else
896919 {
0 commit comments