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

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

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

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

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

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

        DrawGraph ();
    }


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

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

        // Списки точек для трех графиков
        PointPairList list1 = new PointPairList ();
        PointPairList list2 = new PointPairList ();
        PointPairList list3 = new PointPairList ();

        double xmin = -50;
        double xmax = 50;

        // Заполняем списки точек
        for (double x = xmin; x <= xmax; x += 0.01)
        {
            list1.Add (x, f1 (x));
            list2.Add (x, f2 (x));
            list3.Add (x, f3 (x));
        }

        // Удалим существующие оси Y
        pane.YAxisList.Clear ();

        // Создадим три новых оси Y
        // Метод AddYAxis() возвращает индекс новой оси в списке осей (YAxisList)
        int axis1 = pane.AddYAxis ("Axis 1");
        int axis2 = pane.AddYAxis ("Axis 2");
        int axis3 = pane.AddYAxis ("Axis 3");          

        // Создадим три кривые
        LineItem myCurve1 = pane.AddCurve ("Curve 1", list1, Color.Blue, SymbolType.None);
        LineItem myCurve2 = pane.AddCurve ("Curve 2", list2, Color.Black, SymbolType.None);
        LineItem myCurve3 = pane.AddCurve ("Curve 3", list3, Color.Red, SymbolType.None);

        // Для каждой кривой установим свои оси
        myCurve1.YAxisIndex = axis1;
        myCurve2.YAxisIndex = axis2;
        myCurve3.YAxisIndex = axis3;

        // Для наглядности раскрасим надписи на оси Y в цвета графика,
        // который рисуется с этой осью
        pane.YAxisList[axis1].Title.FontSpec.FontColor = Color.Blue;
        pane.YAxisList[axis2].Title.FontSpec.FontColor = Color.Black;
        pane.YAxisList[axis3].Title.FontSpec.FontColor = Color.Red;

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

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


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

        return Math.Sin (x) / x;
    }


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

        return 10 * Math.Sin (x * 0.5) / x;
    }


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

        return 0.1 * Math.Sin (x * 2) / x;
    }
}

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

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

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



Максим 09.09.2013 - 19:20

Вопрос

Все хорошо. А подскажите пожалуйста существует ли способ чтобы выровнять все оси по линии нуля??

И можно ли как нибудь по быстрому изменять масштаб отдельных осей, не трогая остальных?

Jenyay 09.09.2013 - 20:01

По поводу нуля надо будет посмотреть. А чтобы изменять масштаб отдельных осей, можно сначала получить указатель на класс оси, а затем воспользоваться методом set_xlim или set_ylim.

Максим 09.09.2013 - 20:42

Спасибо. по поводу set_xlim или set_ylim
А вот по нулю обыскался уже, нигде никто не пишет как будто это не проблема вообще. Но нигде также ни слова о выравнивании.
Если у вас получится найти сообщите пожалуйста, буду очень благодарен.
Спасибо.

Jenyay 09.09.2013 - 22:35

По поводу set_xlim или set_ylim это я ошибся. Я думал, что это статься про Matplotlib, а не про ZedGraph. Но по идее здесь через свойства отдельных осей тоже можно независимо устанавливать масштаб, по памяти не помню, как оно называется.

Максим 10.09.2013 - 06:44

А по поводу выравнивания у вас получится найти что-нибудь?

Jenyay 10.09.2013 - 12:31

Надо покопаться в справке, может быть что-нибудь найдется.

Bod 19.01.2014 - 17:32

... существует ли способ чтобы выровнять все оси по линии нуля

pane.YAxisList[axis1].Scale.Min = 0;
pane.YAxisList[axis2].Scale.Min = 0;
pane.YAxisList[axis3].Scale.Min = 0;

engavr 06.10.2014 - 16:44

xAxis

Можно ли сделать две оси Х?

Sid 05.05.2015 - 13:42

xAxis

тоже очень интересует: можно ли несколько осей Х сделать? Подскажите, пожалуйста, как?


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