Диаграммы

Компонент ZedGraphControl предназначен для построения различных видов диаграмм. Для построения различного рода графиков в C# существует множество внешних библиотек и компонентов. В большинстве своем это закрытые и/или платные продукты/ Исключение составляет свободный компонент ZedGraph. Полную документацию по данному компоненту можно найти по адресу http://zedgraph.org. Компонент позволяет строить как простые линейные графики, так и прямоугольные и круговые. Компонент совместим с .NET 2.0 и корректно работает в MS Visual Studio 2005 и 2008. Внимание. Компонент ZedGraphControl не входит в установочный пакет Microsoft Visual C# 2008 Express Edition. Для работы с этим компонентом, его необходимо предварительно установить на компьютер.
Установка компонента по работе с диаграммами
Чтобы установить компонент ZedGraphControl на компьютер необходимо:
- Скопировать папку с библиотекой ZedGraph.dll на компьютер в папку Microsoft Visual C# 2008 Express Edition.
- Добавить новый компонент на Панель элементов. Для этого одним щелчком левой кнопкой мыши выделите вкладку на панели элементов, в которую необходимо добавить компонент ZedGraphControl.
- Выбрать в программном меню Сервис команду Выбрать элементы панели элементов.
- В открывшемся окне перейти на вкладку Компоненты .Net Framework. Если в списке компонентов отсутствует компонент ZedGraphControl, то нажать кнопку Обзор, найти файл ZedGraph.dll.
- Выбрать компонент из списка компонентов и нажать кнопку ОК.
Результат. Компонент
появится на панели элементов в выбранной вкладке. Если перенести компонент ZedGraphControl на форму, то на форме появится заготовка с диаграммой: 
- Подключить библиотеку в модуле:
using ZedGraph; Структура всех диаграмм одинаковая — главное окно, внутри которого располагается экземпляр класса ZedGraphControl. Имя экземпляра класса — zedGraph. В конструкторе окна вызывается метод DrawGraph(), внутри которого и происходит заполнение компонента данными. Структура: private void Draw()//СозданиеполотноGraphPane pane = new GraphPane()// Создание прямоугольной рабочей области;Rectangler=newRectangle();r.Width = zedGraphControl1.Width; r.Height = zedGraphControl1.Height;//Очисткаполотнаpane.CurveList.Clear();// Создание списка точек, по которым будет строится график (X,Y)PointPairList list = new PointPairList();for (i = 0; i < 5; i++)//Построениеграфика,например:LineItem myCurve = pane.AddCurve(«График«, list, Color.Blue, SymbolType.None);// Настройка параметров: ……………………………………………………………..// Построение осейpane.AxisChange();// Совмещаем полотно и рабоую областьpane.Rect=r;// Совмещаем полотно и компонентzedGraphControlzedGraphControl1.GraphPane=pane;>
Zedgraph c как подключить
В программе (C#) нужно использовать этот класс для рисования графика. У меня есть соответствующая dll. Вопрос: как подключить ее к проекту и использовать потом этот класс в качестве компонента? Примеры работы с ним у меня есть, но на форме ничего не прорисовывается.
Пользователь
Регистрация: 26.07.2009
Сообщений: 19
Открываешь toolbox в среде, щелкаешь на нем правой кнопкой мыши и выбираешь Choose Item. В открывшемся окне кнопка Browse и выбираешь свою dll. Контрол добавиться в toolbox. Перетаскивай на форму и настраивай.
Для рисования графиков вот пример:
zgControl.GraphPane.CurveList.Clear(); //отрисовка аварийной области ZedGraph.BoxItem box = new ZedGraph.BoxItem(new RectangleF(0, (float)zgControl.GraphPane.YAxis.Max, (float)zgControl.GraphPane.XAxis.Max, (float)zgControl.GraphPane.YAxis.Max - iHighLimitAmperage)); box.Fill = new ZedGraph.Fill(Color.FromArgb(240, 200, 200), Color.FromArgb(250, 250, 220), 90); box.ZOrder = ZedGraph.ZOrder.E_BehindAxis; zgControl.GraphPane.GraphItemList.Add(box); //отрисовка аварийной границы ZedGraph.PointPairList alarmPoints = new ZedGraph.PointPairList(); for (int i = 0; i ZedGraph.LineItem CurveAlarm = zgControl.GraphPane.AddCurve("Аварийная граница", alarmPoints, Color.Red, ZedGraph.SymbolType.None); CurveAlarm.Line.Width = 1; CurveAlarm.IsLegendLabelVisible = false; //отрисовка ампеража if (push_id != -1) < ZedGraph.PointPairList amperagePoint = new ZedGraph.PointPairList(); DataRow[] aDrAmp = this.fillJournal.GetAmperage(push_id); if (aDrAmp != null) < if (aDrAmp.Length != 0) < for (int i = 0; i < aDrAmp.Length; i++) < amperagePoint.Add(i, (int)aDrAmp[i][0], String.Format("Печь-.Время выдачи-.Ампераж- А", nOven, dtFactPush, (int)aDrAmp[i][0])); > ZedGraph.LineItem AmpCurve = zgControl.GraphPane.AddCurve("Ампераж", amperagePoint, Color.Blue, ZedGraph.SymbolType.None); AmpCurve.Line.Width = 2; AmpCurve.IsLegendLabelVisible = false; > > > zgControl.Refresh(); >
Шпаргалка по ZedGraph. Как нарисовать несколько графиков в одних осях
Все примеры объединены в одном solution для Visual Studio 2005 и написаны на языке C#, скачать их можно отсюда (1.7 МБ).
Проект в примере — SeveralGraphs
private double f1 ( double x )
{
if ( x == 0 )
{
return 1 ;
}
return Math . Sin ( x ) / x ;
}
private double f2 ( double x )
{
return Math . Sin ( x / 2 ) / 2 ;
}
private void DrawGraph ( )
{
// Получим панель для рисования
GraphPane pane = zedGraph . GraphPane ;
// Очистим список кривых на тот случай, если до этого сигналы уже были нарисованы
pane . CurveList . Clear ( ) ;
// Создадим список точек для кривой f1(x)
PointPairList f1_list = new PointPairList ( ) ;
// Создадим список точек для кривой f2(x)
PointPairList f2_list = new PointPairList ( ) ;
double xmin = — 50 ;
double xmax = 50 ;
// .
// Заполним массив точек для кривой f1(x)
for ( double x = xmin ; x {
f1_list . Add ( x, f1 ( x ) ) ;
}
// .
// Заполним массив точек для кривой f2(x)
// Интервал и шаги по X могут не совпадать на разных кривых
for ( double x = 0 ; x {
f2_list . Add ( x, f2 ( x ) ) ;
}
// .
// Создадим кривую с названием «Sinc»,
// которая будет рисоваться голубым цветом (Color.Blue),
// Опорные точки выделяться не будут (SymbolType.None)
LineItem f1_curve = pane . AddCurve ( «Sinc» , f1_list, Color . Blue , SymbolType . None ) ;
// .
// Создадим кривую с названием «Sin»,
// которая будет рисоваться красным цветом (Color.Red),
// Опорные точки будут выделяться плюсиками (SymbolType.Plus)
LineItem f2_curve = pane . AddCurve ( «Sin» , f2_list, Color . Red , SymbolType . Plus ) ;
// Вызываем метод AxisChange (), чтобы обновить данные об осях.
// В противном случае на рисунке будет показана только часть графика,
// которая умещается в интервалы по осям, установленные по умолчанию
zedGraph . AxisChange ( ) ;
// Обновляем график
zedGraph . Invalidate ( ) ;
}
Интеграция исходников ZedGraph в проект
Пытаюсь использовать данный компонент в качестве части проекта чтобы исключить внешние библиотеки. Подскажите как использовать сторонние решения как часть проекта. На данный момент я создал папку внутри проекта под названием zedgraph и добавил в неё все классы из аналогичной папки с исходным кодом ZedGraph удалив из неё все локали кроме английской и файл .csproj. На Панели инструментов -> Компоненты [Имя проекта] появился элемент ZedGraphControl . Но любая попытка добавить его в форму выдаёт ошибку:
Не удалось создать компонент ‘ZedGraphControl’. Сообщение об ошибке: «System.Resources.MissingManifestResourceException: Не удалось найти ресурсы, соответствующие указанной культуре. Проверьте правильность внедрения или связывания ‘ZedGraph.ZedGraph.ZedGraphLocale.resources» со сборкой «[имя проекта]» во время компиляции или убедитесь что все необходимые сопутствующие сборки полностью подписаны и могут быть загружены.
Что я забыл сделать? Исходный код библиотеки здесь.
Отслеживать
задан 29 дек 2017 в 1:46
1,259 11 11 серебряных знаков 25 25 бронзовых знаков
Ну так вы поудаляли файлы с ресурсами для текущей культуры, чего теперь хотите?
29 дек 2017 в 5:29
@Андрей, какие именно нужно было оставить? Я удалил только лишние локали оставив только одну. Также был удалён ZedGraph.csproj.
29 дек 2017 в 21:55
не совсем понятно о чем идет речь, например вот это предложение «Подскажите как использовать сторонние решения как часть проекта.» ?
– user227049
29 дек 2017 в 23:38
@FoggyFinder, использовать исходный код библиотеки как часть проекта. Не имею привычек вешать хвосты к исполняемому коду в виде внешних библиотек/пакетов. Поэтому и спрашиваю «Как?» интегрировать.