public static List<Point> OptimizeForIndexedChart(this IEnumerable<Point> points, Chart chart)
 {
     var isFirst = true;
     var result = new List<Point>();
     var ppp = chart.PerformanceConfiguration.PixelsPerPoint;
     double? x = null;
     var g = new List<Point>();
     foreach (var point in points)
     {
         var chartValue = chart.ToPlotArea(point.X,AxisTags.X);
         if (x == null) x = chartValue;
         if (chartValue - x < ppp)
         {
             g.Add(point);
             continue;
         }
         //ToDo: Think about this:
         //average seems the best "general" method, but maybe a developer
         //should be able to choose the method.
         var xx = g.Average(p => p.X);
         if (isFirst)
         {
             xx = g.First().X;
             isFirst = false;
         }
         result.Add(new Point(xx, g.Average(p => p.Y)));
         g = new List<Point> {point};
         x = chart.ToPlotArea(point.X, AxisTags.X);
     }
     result.Add(new Point(g.Last().X, g.Average(p => p.Y)));
     return result;
 }
        private void Chart_OnPlot(Chart chart)
        {
            var sunPoint = chart.ToPlotArea(new Point(4, 35));
            var snowPoint = chart.ToPlotArea(new Point(8, -3));
            var notePoint = chart.ToPlotArea(new Point(1, 35));

            Canvas.SetLeft(_sun, sunPoint.X - 20);
            Canvas.SetLeft(_snow, snowPoint.X - 20);
            Canvas.SetLeft(_note, notePoint.X);

            Canvas.SetTop(_sun, sunPoint.Y - 20);
            Canvas.SetTop(_snow, snowPoint.Y - 20);
            Canvas.SetTop(_note, notePoint.Y);
        }