void Draw_Graph(Rectangle area, Gdk.Window window, double y_grid, double y_max, bool grid, IEnumerable <double> data, Gdk.GC gc) { int y_intervals = (int)Math.Ceiling(y_max / y_grid); double offset_x = area.Left; double offset_y = area.Bottom; double scale_x = area.Width / (double)(data.Count() + 1); double scale_y = -area.Height / (y_grid * y_intervals); if (grid) { for (int i = 0; i <= y_intervals; i++) { int y = (int)Math.Round(offset_y + scale_y * y_grid * i); window.DrawLine(drawingArea.Style.MidGC(Gtk.StateType.Normal), area.Left, y, area.Right, y); } } var points = data.Select((y, i) => new Point( (int)Math.Round(offset_x + scale_x * i), (int)Math.Round(offset_y + scale_y * y))); window.DrawLines(gc, points.ToArray()); }