Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по C#.doc
Скачиваний:
327
Добавлен:
08.11.2018
Размер:
5.81 Mб
Скачать
      1. Основные методы по работе с компонентом zedGraphControl

1) Создание панели для рисования

GraphPane pane = new GraphPane();

2) Очистка списка кривых на тот случай, если до этого сигналы уже были нарисованы

pane.CurveList.Clear ();

3) Создание списка точек (Х, У) для построения кривой:

PointPairList list = new PointPairList ();

4) Заполнение списка точек (Х, У) для построения кривой, например на диапазоне [-50; 50]:

double xmin = -50;

double xmax = 50;

for (double x = xmin; x <= xmax; x += 0.01)

{// добавим в список точку

list.Add (x, f(x));

}

5) Создание кривой с названием "График", которая будет рисоваться голубым цветом (Color.Blue), опорные точки выделяться не будут (SymbolType.None):

LineItem myCurve = pane.AddCurve ("Название графика", список точек, цвет, SymbolType.None);

Пример:

LineItem myCurve = pane.AddCurve ("График", list, Color.Blue, SymbolType.None);

6) Обновление данных об осях с помощью метода AxisChange (). В противном случае на рисунке будет показана только часть графика, которая умещается в интервалы по осям, установленные по умолчанию.

pane.AxisChange ();

7) Создание полотна:

zedGraphControl1.GraphPane = pane;

8) Изменение пределов отображаемой области по осям

double xmin_limit = -10;

double xmax_limit = 80;

double ymin_limit = -1.0;

double ymax_limit = 1.0;

Устанавливаем интересующий нас интервал по оси X

pane.XAxis.Scale.Min = xmin_limit;

pane.XAxis.Scale.Max = xmax_limit;

Устанавливаем интересующий нас интервал по оси Y

pane.YAxis.Scale.Min = ymin_limit;

pane.YAxis.Scale.Max = ymax_limit;

9) Изменение порядка нумерации:

Примечание. Если минимальное значение оси 0, то нумерация пойдет: 3, 13,…..

pane.YAxis.Scale.BaseTic = 3;

10) Изменение расстояния между крупными и мелкими рисками

Шаг от минимального значения оси для крупных рисок:

pane.YAxis.Scale.MajorStep = 10;

Шаг от минимального значения оси для мелких рисок:

pane.YAxis.Scale.MinorStep=2;

11) Настройка масштаба диаграммы по размеру компонента

Rectangle r = new Rectangle();

r.Width = zedGraphControl1.Width;

r.Height = zedGraphControl1.Height;

pane.Rect = r;

12) Отключение лупы (Zoom):

zedGraphControl1.IsEnableHZoom = false;

zedGraphControl1.IsEnableVZoom = false;

13) Построение графика в виде отдельных не связанных точек

// Создадим кривую с названием "Разброс". Обводка ромбиков будут рисоваться голубым цветом (Color.Blue), Опорные точки - ромбики (SymbolType.Diamond)

LineItem myCurve = pane.AddCurve ("Разброс", list, Color.Blue, SymbolType.Diamond);

//У кривой линия будет невидимой

myCurve.Line.IsVisible = false;

//Цвет заполнения отметок (ромбиков) – голубой

myCurve.Symbol.Fill.Color = Color.Blue;

//Тип заполнения - сплошная заливка

myCurve.Symbol.Fill.Type = FillType.Solid;

//Размер ромбиков

myCurve.Symbol.Size = 7;

14) Обновление графика

Global.f7.Refresh();

или

zedGraphControl1.Refresh();

15) Удаление легенды:

pane.Legend.IsVisible = false;

16) Вставка заголовка диаграммы:

pane.Title.Text = "Графики";

17) Удаление горизонтальной линии по уровню y = 0 на графике

pane.YAxis.MajorGrid.IsZeroLine = false;

18) Построение графика по вертикали

//Линия по нулевому уровню должна быть перпендикулярна оси X

pane.XAxis.MajorGrid.IsZeroLine = true;

//Поменяем названия осей, чтобы еще больше запутать противника :)

pane.XAxis.Title.Text = "YAxis";

pane.YAxis.Title.Text = "XAxis";

19) Построение на графике линий, стрелок и размещение текста

//Линию рисуем после обновления осей с помощью AxisChange (), так как мы будем использовать значения. Нарисуем горизонтальную пунктирную линию от левого края до правого на уровне y = 0.5

double level = 0.5;

LineObj line = new LineObj (pane.XAxis.Scale.Min, level,

pane.XAxis.Scale.Max, level);

//Стиль линиипунктирная

line.Line.Style = System.Drawing.Drawing2D.DashStyle.Dash;

//Добавим линию в список отображаемых объектов

pane.GraphObjList.Add (line);

//Нарисуем стрелку, указывающую на максимум функции

Координаты точки, куда указывает стрелка

Координаты привязаны к осям

double xend = 0.0;

double yend = f(0);

//Координаты точки начала стрелки

double xstart = xend + 5.0;

double ystart = yend + 0.1;

//Рисование стрелки с текстом

Создадим стрелку

ArrowObj arrow = new ArrowObj (xstart, ystart, xend, yend);

//Добавим стрелку в список отображаемых объектов

pane.GraphObjList.Add (arrow);

//Напишем текст около начала стрелки

Координаты привязаны к осям

TextObj text = new TextObj ("Max", xstart, ystart);

//Отключим рамку вокруг текста

text.FontSpec.Border.IsVisible = false;

//Изменим цвет текста

text.FontSpec.FontColor = Color.Green;

//Добавим текст в список отображаемых объектов

pane.GraphObjList.Add (text);

20) Отображение сетки и изменение ее внешнего вида

//Включаем отображение сетки напротив крупных рисок по оси X

pane.XAxis.MajorGrid.IsVisible = true;

//Задаем вид пунктирной линии для крупных рисок по оси X:

//Длина штрихов равна 10 пикселям, ...

pane.XAxis.MajorGrid.DashOn = 10;

//затем 5 пикселей – пропуск

pane.XAxis.MajorGrid.DashOff = 5;

//Включаем отображение сетки напротив мелких рисок по оси X

pane.YAxis.MinorGrid.IsVisible = true;

21) Построение гистограммы и текстовых осей

int itemscount = 5;

//Подписи под столбиками

string[] names = new string[itemscount];

//Высота столбиков

double[] values = new double[itemscount];

//Заполним данные

for (int i = 0; i < itemscount; i++)

{names[i] = string.Format ("Текст {0}", i);

values[i] = rnd.NextDouble ();

}

//Создадим кривую-гистограмму Первый параметр - название кривой для легенды Второй параметр - значения для оси X, т.к. у нас по этой оси будет идти текст, а функция ожидает тип параметра double[], то пока передаем null Третий параметр - значения для оси Y Четвертый параметр – цвет

BarItem curve = pane.AddBar ("Гистограмма", null, values, Color.Blue);

//Настроим ось X так, чтобы она отображала текстовые данные

pane.XAxis.Type = AxisType.Text;

//Уставим для оси наши подписи

pane.XAxis.Scale.TextLabels = names;

22) Изменение размеров шрифтов у различных элементов графика

//Размеры шрифтов для разных элементов графика

int labelsXfontSize = 25;

int labelsYfontSize = 20;

int titleXFontSize = 25;

int titleYFontSize = 20;

int legendFontSize = 15;

int mainTitleFontSize = 30;

//Установим размеры шрифтов для меток вдоль осей

pane.XAxis.Scale.FontSpec.Size = labelsXfontSize;

pane.YAxis.Scale.FontSpec.Size = labelsYfontSize;

//Установим размеры шрифтов для подписей по осям

pane.XAxis.Title.FontSpec.Size = titleXFontSize;

pane.YAxis.Title.FontSpec.Size = titleYFontSize;

//Установим размеры шрифта для легенды

pane.Legend.FontSpec.Size = legendFontSize;

//Установим размеры шрифта для общего заголовка

pane.Title.FontSpec.Size = mainTitleFontSize;

pane.Title.FontSpec.IsUnderline = true;

22) Установка масштаба по осям по умолчанию

//Установим масштаб по умолчанию для оси X

pane.XAxis.Scale.MinAuto = true;

pane.XAxis.Scale.MaxAuto = true;

23) Построение пунктирные и штрихпунктирные линии

//Используем предустановленный стиль, рисующий кривую точками. Идентификатор стиля определен в стиле

System.Drawing.Drawing2D.DashStyle.myCurve.Line.Style = DashStyle.Dot;

//Укажем, что график должен быть сглажен, иначе не сплошные линии будут выглядеть неаккуратно. Это происходит из-за того, что без использования сглаживания ZedGraph будет каждый участок линии рисовать независимо от соседних.

myCurve.Line.IsSmooth = true;

//Используем предустановленный стиль, рисующий кривую в виде штрихпунктирной линии.

myCurve.Line.Style = DashStyle.DashDot;

//Определим свой стиль рисования линии

myCurve.Line.Style = DashStyle.Custom;

//Длина пунктира будет 10 у.е. (1 у.е = 1/72 inch)

myCurve.Line.DashOn = 10.0f;

//Длина пропуска между пунктирами

myCurve.Line.DashOff = 3.0f;

24) Использование кластеров в гистограммах

int itemscount = 5;

Random rnd = new Random ();

//Высота столбиков

double[] YValues1 = new double[itemscount];

double[] YValues2 = new double[itemscount];

double[] YValues3 = new double[itemscount];

double[] XValues = new double[itemscount];

//Заполним данные

for (int i = 0; i < itemscount; i++)

{XValues[i] = i + 1;

YValues1[i] = rnd.NextDouble ();

YValues2[i] = rnd.NextDouble ();

YValues3[i] = rnd.NextDouble ();

}

//Создадим три гистограммы

Так как для всех гистограмм мы передаем одинаковые массивы координат по X, то столбики будут группироваться в кластеры в этих точках.

BarItem bar1 = pane.AddBar ("Values1", XValues, YValues1, Color.Blue);

BarItem bar2 = pane.AddBar ("Values2", XValues, YValues2, Color.Red);

BarItem bar3 = pane.AddBar ("Values3", XValues, YValues3, Color.Yellow);

//Расстояния между столбиками в кластере (группами столбиков)

Pane.BarSettings.MinBarGap = 0.0f;

//Увеличим расстояние между кластерами в 2.5 раза

pane.BarSettings.MinClusterGap = 2.5f;