Чем же так хороша NPlot? Существует далеко не одна библиотека для построения графиков, но многие из них работают только под .NET или слишком завязаны на Windows.Forms. Но я заинтересован в кроссплатформенности, то есть мне нужно нечто совместимое с mono и gtk. NPlot соответствует этим требованиям, причем лицензирована она под BSD, что тоже приятно.
Однако знакомство с NPlot было омрачено отсутствием нормальной документации. Да и тестовый пример, идущий вместе с библиотекой, работает ужасно:

Но все же видно, что основную функцию — рисование графиков — NPlot выполняет, а потому я решил разобраться и написать подобие документации. Быть может, кому-нибудь пригодится.
В первую очередь надо нарисовать сами линии графика:
//Как нетрудно догадаться, линии строятся по точкам. Зададим их
double[] a = {0, 200, 140, 14, 240, 320, 150, 80, 170, 90};
//Теперь можно нарисовать соответствующую линию и задать ей название в легенде
LinePlot lp = new LinePlot();
lp.DataSource = a;
lp.Label = "My Label";
//По умолчанию линия черная и тонкая. Это можно изменить предварительно созданным объектом System.Drawing.Pen
lp.Pen = PenName;
//Для лучшего вида на график наносится сетка
Grid myGrid = new Grid();
//По неясной причине, Vertical обозначает горизонтальные линии, которые будут видимы в данном случае
myGrid.VerticalGridType = Grid.GridType.Fine;
//а Horizontal — вертикальные линии сетки, которые будут убраны
myGrid.HorizontalGridType = Grid.GridType.None;
* This source code was highlighted with Source Code Highlighter.
Когда все линии нарисованы, пора заняться плоскостью графика, где они будут отображены:
//Первое, что нужно сделать для построения графика — объявить поле для его построения
NPlot.Gtk.PlotSurface2D plot = new NPlot.Gtk.PlotSurface2D();
//И очистить его от лишнего содержимого, если имеется
plot.Clear();
//Можно установить заголовок
plot.Title = "Title";
//Добавить рамочку с легендой графика
plot.Legend = new Legend();
//переместить ее вправо-вниз
plot.Legend.AttachTo(NPlot.PlotSurface2D.XAxisPosition.Bottom, NPlot.PlotSurface2D.YAxisPosition.Right);
//отодвинуть от оси, чтобы не перекрывать числа
plot.Legend.YOffset = 16;
//и вынести за плоскость графика
plot.Legend.HorizontalEdgePlacement = Legend.Placement.Outside;
plot.Legend.VerticalEdgePlacement = Legend.Placement.Inside;
//Расширим пространство вокруг плоскости графика
plot.Padding = 40;
//Чтобы линии выглядели не так убого, стоит их сгладить
plot.SmoothingMode=System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
//Осталось добавить все элементы на график
plot.Add(myGrid);
plot.Add(lp);
//Если график финансовый, то надо это четко обозначить, подписав ось
plot.YAxis1.Label = "Money";
//и сделав нормальное отображение чисел на оси (по умолчанию — экспоненциальный вид)
plot.YAxis1.NumberFormat = "{0:n}";
//Последний шаг
plot.Refresh()
* This source code was highlighted with Source Code Highlighter.
В результате получается простое и качественное изображение

Как я понял, функционал этим не ограничен и проект еще не мертв(последнее сообщение «Code Committed» на Sourceforge было всего 64 дня назад). По мере изучения NPlot буду дополнять статью.

