Построение графиков с: Средства построения графиков для .NET / Хабр

Средства построения графиков для .NET / Хабр

Не так давно пришлось столкнуться с тривиальной задачей — найти решение, которое позволит рендерить рисунки графиков для .NET. Сразу оговорюсь, что меня интересовали только линейные графики. Камнем преткновения, который подтолкнул к переделыванию уже существующего решения (это были графики, встроенные в rdlc отчеты), было быстродействие. В целом, к искомому решению были предъявлены такие требования:

  1. Необходимо оставить данную оптимизацию незамеченной для конечного пользователя, следовательно, решение должно быть широко настраиваемым, чтобы, в конечном счете, выглядеть так же, как и предшественник.
  2. Работать быстро (ну понятно, пользователи не любят ждать).
  3. Желательно, быть бесплатным или с открытым исходным кодом. Покупка не стала бы большой проблемой, найди я отличное платное решение, но начать лучше с open source.


Что было сделано?

Погуглив, выяснилось, что существует достаточно много вариантов для решения данной задачи, и все они достаточно сильно отличаются по многим параметрам (размер сообщества, скорость работы, удобство).

В процессе выбора решения было опробовано 8 бесплатных вариантов:

  • DisLin. Кроссплатформенная библиотека (UNIX, Linux, FreeBSD, OpenVMS, Windows, Mac OSX и MS-DOS). Чрезвычайно мощная, гибкая, действительно стоит того, чтобы написать отдельную статью только о ней. Может быть, немного уступает своим конкурентам по степени читабельности кода (использует классический функциональный подход), но зато, благодаря этому, может быть легко портирована практически на любой язык. Имеет ванильные торты порты на C, C++, Fortran 77, Fortran 90, Perl, Python, Ruby, Tgl, GCL (порт на C# — обычная библиотека с импортированными функциями). Бесплатная для некоммерческого использования.
  • Google Chart Sharp. Обертка над Google Chart API для С#. На хабре уже были статьи о нем, поэтому в двух словах: бесплатный (с ограничением 50000 тыс. вызовов в день), работает очень шустро, присутствуют основные параметры для кастомизации. Среди плюсов: возможность использовать везде, где есть подключение к интернету, независимость от используемого языка / ОС.
    Основной минус — это, естественно, дополнительный round-trip данных по сети (если график Вам нужен ещё на сервере), что замедляет процесс.
  • Microsoft Chart Controls. Нативный функционал от Microsoft, который был представлен общественности в далеком 2008 году. К тому времени уже существовал ряд решений от сторонних разработчиков, но это не помешало Ms Chart Controls быстро завоевать популярность среди разработчиков. И не удивительно, ведь они поставлялись с .NET framework, имели удачную архитектуру, были легко настраиваемыми и привлекательными на вид. По скорости уступают остальным, но, тем не менее, работают тоже вполне прилично.
  • NPlot. Ещё одна open source библиотека. Правда, не самая быстрая и популярная — информацию по ней можно найти в Интернете, хотя и не так много, как, например, по Microsoft Chart Controls. Тем не менее, поигравшись с ней, у меня осталось довольно приятное послевкусие.
  • OxyPlot. «Живой» кроссплатформенный open source, где можно даже зарепортить баг, на который, скорее всего, отреагируют. Доступен также в NuGet. Есть соответствующие контролы для WPF/Silverligth, WinForms, Metro. Плюшки, вроде экспорта напрямую в OpenXml и Pdf. Если Вам необходимо не «минутное» решение и возможность поправить его под себя, это решение для Вас.
  • ZedGraph. Также «живой» open source, прямой конкурент для OxyPlot. По количеству поддерживаемых платформ (только Windows) и технологий (только WinForms и ASP .NET) уступает ему, но очень симпатичный и один из самых быстрых. Отличный выбор, если Вам надо «просто красивый график» и больше ничего.
  • WebChart. Бесплатный предшественник Microsoft Chart Controls. Насколько я вижу, мертвый с 2004 года. У него чуть более убогий функционал в сравнении с остальными решениями, но, так как он имеет некоторые внешние отличия от остальных, может быть вполне полезен.
  • OpenMinded. Беплатный вариант от пользователя OpenMinded. Выглядит красиво. О производительности судить трудно, так как я не нашел возможности рендерить результирующий рисунок иначе как на жесткий диск. Но поскольку проэкт открытый, любой желающий может его доделать под себя, уверен — это не проблема.

Ещё в самом начале я решил, что надо собрать как можно больше вариантов в одном месте и протестить их на быстродействие, а уже после этого было очень жалко выбрасывать в корзину проделанную работу. Поэтому было решено оформить эту статейку и выложить то, что получилось, на GitHub. Таким образом, если возникла необходимость, Вы можете настроить каждое решение под себя и сразу же его проверить. Лично мне очень не хватало такой статьи в начале. Может быть, исходники вызовут улыбку у гуру, но новичкам, которые только вникают в .NET и ASP, они однозначно будут очень полезны.

Для сравнения скорости работы берутся дефолтные настройки графика, указывается разрешение выходного рисунка и ему скармливается фиксированное количество точек. Каждое решение прогоняется несколько раз, и в качестве реальной скорости берется среднее. Опять же, это достаточно субъективно, и, если Вы можете предложить более красивый подход, я с интересом выслушаю.

На моем ПК (Intel Core I5 3.10 GHz, 8gb ОЗУ, Windows 7 x64) вышло следующее распределение скорости работы:


Решение
Количество итераций
Суммарное время (сек)
Среднее время на одну итерацию (сек)
1
Dislin charts
5
1.9071907
0.38143814
2
Zed Graph
5
2.750275
0.550055
3
NPlot
5
3.1833183
0.63666366
4
Web Chart Control
5
5.130513
1.0261026
5
Microsoft Chart Controls
5
6. 8456845
1.3691369
6
Oxy Plot
5
7.0067006
1.40134012
7
Open minded plot
5
8.257
1.6514
8
Google Sharp charting
5
9.8049804
1.96099608

Для различных входных параметров (разрешение изображения, количество точек на графике, параметры ПК, скорость интернета, фаза Луны и т.д.) результаты немного отличаются, поэтому Вы можете протестировать быстродействие у себя.

Я специально не делал глубокое сравнения фич и возможностей кастомизации, так как это довольно субъективная информация, которая сильно зависит от конкретной задачи. При необходимости, каждый желающий может провести полчаса, подебажить, посмотреть архитектуру решений, прикинуть, насколько легко их настроить под конкретные требования.
Если кто-то знает ещё бесплатные решения для графиков под .NET, которые пропущены в статье, — пишите в комментариях, и я постараюсь их добавить.

upd — (добавил решение от OpenMinded)
upd2 — (включил DevExpress в опрос)

Карта сайта

Карта сайта

Цвет:C C C

Изображения Вкл. Выкл.

Обычная версия сайта

  • Новости
  • Сведения об образовательной организации
    • Основные сведения
    • Документы
      • Локальные акты
      • Правоустанавливающие
      • Результаты проверок
    • Образование
    • Образовательные стандарты
    • Структура и органы управления образовательной организацией
    • Руководство. Педагогический (научно-педагогический) состав
    • Финансово-хозяйственная деятельность
    • Вакантные места для приёма (перевода)
    • Противодействие коррупции
    • Платные образовательные услуги
    • Правила поступления
    • Результаты самообследования
    • Материально-техническое обеспечение и оснащённость образовательного процесса
    • Стипендии и иные виды материальной поддержки
    • Охрана здоровья, безопасность
    • Историческая справка
    • Сотрудничество с вузами
    • Независимая оценка качества
    • Организация питания
    • Доступная среда
    • Международное сотрудничество
  • Образовательная деятельность
    • ГИА
      • ЕГЭ
      • ОГЭ
    • Результативность обучения
    • Дистанционное обучение
  • Дополнительные сведения
    • Воспитательная работа
      • Патриотическое воспитание
      • Профилактика правонарушений
      • Противодействие терроризму и экстремизму
      • Профилактика дорожного движения
      • Детские общественные организации
      • Юнармия
      • Важные мероприятия
    • Школьная газета
    • Внеурочная деятельность
      • Доп. Курсы/ Кружки/ Факультативы
      • Спортивные секции
    • Олимпиадное движение
    • Методическая работа
    • Аттестация педагогических работников
    • Страница психолога
    • ПМПК
    • Часто задаваемые вопросы
    • Школьный спортивный клуб
    • Школьный театр
    • «Без срока давности»
  • Галерея
    • Наши достижения
    • Фотогалерея
  • Ежедневное меню
  • Контакты