Шпаргалка по ZedGraph. Как задавать координаты графических объектов относительно видимой части графика | jenyay.net

Шпаргалка по ZedGraph. Как задавать координаты графических объектов относительно видимой части графика

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

Данный пример показывает, как использовать систему координат, привязанную к прямоугольной области, где рисуется график. Координата (0; 0) соответствует левому верхнему углу, а координата (1; 1) - правому нижнему.

Для переключения системы координат используется перечисление типа CoordType.

Все примеры объединены в одном solution для Visual Studio 2005 и написаны на языке C#, скачать их можно отсюда.

Проект в примере - CoordTypeChartFraction

public partial class Form1 : Form
{
    public Form1 ()
    {
        InitializeComponent ();

        DrawGraph ();
    }


    private double f (double x)
    {
        if (x == 0)
        {
            return 1;
        }

        return Math.Sin (x) / x;
    }


    /// <summary>
    /// !!! Нарисовать графические объекты
    /// </summary>
    /// <param name="pane"></param>
    private void DrawObjects (GraphPane pane)
    {
        // Создадим текстовый объект, координаты которого задаются
        // не в координатах графика, а в координатах относительно графика
        TextObj text = new TextObj ("Этот текст всегда находится в углу",
            0.0, 1,                      // Координаты текстового объекта
            CoordType.ChartFraction,     // Координаты задаются относительно графика
            AlignH.Left,                 // Координата по X задает положение левой границы объекта
            AlignV.Bottom);              // Координата по Y задает положение нижней границы объекта

        // Добавим текст в список графических объектов
        pane.GraphObjList.Add (text);

        // Нарисуем перекрестие, которое всегда будет посередине графика

        // Создадим горизонтальную линию
        LineObj cross_hor = new LineObj (Color.Black, 0.48, 0.5, 0.52, 0.5);
        // Ее координаты рассчитываются относительно графика
        cross_hor.Location.CoordinateFrame = CoordType.ChartFraction;
        // Координаты задают центральную точку и по горизонтали, и по вертикали
        cross_hor.Location.AlignH = AlignH.Center;
        cross_hor.Location.AlignV = AlignV.Center;

        // Аналогично создаем вертикальную линию перекрестия
        LineObj cross_ver = new LineObj (Color.Black, 0.5, 0.48, 0.5, 0.52);
        cross_ver.Location.CoordinateFrame = CoordType.ChartFraction;
        cross_ver.Location.AlignH = AlignH.Center;
        cross_ver.Location.AlignV = AlignV.Center;

        // Добавим линиии перекрестия в список графических объектов
        pane.GraphObjList.Add (cross_hor);
        pane.GraphObjList.Add (cross_ver);
    }


    private void DrawGraph ()
    {
        GraphPane pane = zedGraph.GraphPane;

        // Нарисуем графические объекты
        DrawObjects (pane);

        // Очистим список кривых
        pane.CurveList.Clear ();

        // Создадим список точек
        PointPairList list = new PointPairList ();

        double xmin = -50;
        double xmax = 50;

        // Заполняем список точек
        for (double x = xmin; x <= xmax; x += 0.01)
        {
            // добавим в список точку
            list.Add (x, f (x));
        }

        // Создадим кривую
        LineItem myCurve = pane.AddCurve ("", list, Color.Blue, SymbolType.None);

        // Вызываем метод AxisChange (), чтобы обновить данные об осях.
        zedGraph.AxisChange ();

        // Обновляем график
        zedGraph.Invalidate ();
    }
}

Вернуться к остальным примерам

Вы можете подписаться на новости сайта через RSS, Группу Вконтакте или Канал в Telegram.
5 stars

Рейтинг 4.7/5. Всего 3 голос(а, ов)



Руслан 15.08.2011 - 07:43

В CoordType можно для разных осей задавать разные настройки, например привязать значения по Х к видимой части, а по У к значениям оси. Очень удобно.


Подписаться на комментарии
Автор:
Тема:
 Ваш комментарий
 
 
Введите код 462