Шпаргалка по ZedGraph. Как рассчитывать ординаты графика относительно другого графика | jenyay.net

Шпаргалка по ZedGraph. Как рассчитывать ординаты графика относительно другого графика

По умолчанию все кривые в компоненте ZedGraph независимы, их ординаты рассчитываются относительно линии Y = 0. Однако, присвоив свойству LineType класса GraphPane значение LineType.Stack мы говорим компоненту, что ординаты точек каждой последующей кривой должны рассчитываться относительно соответствующих точек предыдущей кривой, созданной с помощью метода GraphPane.AddCurve().

Такое поведение может быть полезно, например, при выделении области возможных значений относительно заданных точек, хотя для этой цели можно использовать класс ErrorBar.

Данный пример строит график функции, а также две кривые, отстоящие от исходной кривой на 2 единицы вверх и вниз.

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

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

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

        DrawGraph ();
    }

    private double f (double x, double h)
    {
        return Math.Sin (x) * Math.Cos (2.0 * x) + h;
    }

    private void DrawGraph ()
    {
        // Получим панель для рисования
        GraphPane pane = zedGraph.GraphPane;

        // Очистим список кривых на тот случай, если до этого сигналы уже были нарисованы
        pane.CurveList.Clear ();

        // Список точек для центрального графика
        PointPairList list_center = new PointPairList ();

        // Списки точек, для графиков, отсчитываемых относительно других графиков
        PointPairList list_top = new PointPairList ();
        PointPairList list_bottom = new PointPairList ();

        double xmin = 0;
        double xmax = 3 * Math.PI;

        // Заполняем список точек
        for (double x = xmin; x <= xmax; x += 0.2)
        {
            // Точки для основного (центрального) графика
            list_center.Add (x, f (x, 5));

            // Точки для нижнего графика.
            // Его координаты отсчитываются относительно предыдущего графика
            list_bottom.Add (x, -2);

            // Точки для верхнего графика.
            // Его координаты отсчитываются относительно предыдущего графика,
            // т.е. относительно нижнего.
            list_top.Add (x, 4);               
        }

        // Добавим кривые
        // Порядок добавления кривых важен,
        // т.к. мы используем относительные координаты

        // Сначала добавим центральный график
        LineItem curve_center = pane.AddCurve ("Center Line", list_center,
            Color.Black, SymbolType.None);

        // Теперь нижний график,
        // координаты которого отсчитываются относительно центрального графика
        LineItem curve_bottom = pane.AddCurve ("Bottom Line", list_bottom,
            Color.Black, SymbolType.Circle);

        // Верхний график,
        // координаты которого отсчитываются относительно нижнего графика
        LineItem curve_top = pane.AddCurve ("Top Line", list_top,
            Color.Black, SymbolType.Star);

        // Установим заливку для верхней кривой
        curve_top.Line.Fill = new ZedGraph.Fill (Color.Yellow, Color.White, 90.0f);

        // Укажем, что мы используем относительные координаты
        pane.LineType = LineType.Stack;

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

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

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


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




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