Шпаргалка по ZedGraph. Как сделать так, чтобы при перемещении и масштабировании одного графика одновременно перемещался и масштабировался другой график

При использовании MasterPane есть возможность синхронизировать оси таким образом, что при перемещении графика или его масштабировании, такое же масштабирование и перемещение происходит и с остальными графиками.

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

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

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

        DrawGraph ();
    }

    private void DrawGraph ()
    {
        // Создаем экземпляр класса MasterPane
        MasterPane masterPane = zedGraph.MasterPane;

        // !!! Свойства IsSynchronizeXAxes и IsSynchronizeYAxes указывают, что
        // оси на графиках должны перемещаться и масштабироваться одновременно.
        zedGraph.IsSynchronizeXAxes = true;
        zedGraph.IsSynchronizeYAxes = true;

        // Очистим список панелей
        masterPane.PaneList.Clear ();

        // Добавим три графика
        for (int i = 0; i < 3; i++)
        {
            // Создаем экземпляр класса GraphPane, представляющий собой один график
            GraphPane pane = new GraphPane ();

            // Заполнение графика данными не изменилось,
            // поэтому вынесем заполнение точек в отдельный метод DrawSingleGraph()
            DrawSingleGraph (pane);

            // Добавим новый график в MasterPane
            masterPane.Add (pane);
        }

        // Будем размещать добавленные графики в MasterPane
        using (Graphics g = CreateGraphics ())
        {
            // Графики будут размещены в две строки,
            // в первой будет один столбец, а во второй - две
            masterPane.SetLayout (g, PaneLayout.ExplicitCol12);
        }

        // Обновим оси и перерисуем график
        zedGraph.AxisChange ();
        zedGraph.Invalidate ();
    }

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

        return Math.Sin (x) / x;
    }

    private void DrawSingleGraph (GraphPane pane)
    {
        pane.CurveList.Clear ();

        PointPairList list = new PointPairList ();

        double xmin = -40;
        double xmax = 40;

        for (double x = xmin; x <= xmax; x += 0.01)
        {
            list.Add (x, f (x));
        }

        LineItem myCurve = pane.AddCurve ("Sinc", list, Color.Blue, SymbolType.None);
    }
}

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

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

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



GaGa 30.11.2011 - 11:36

Можно ли как то перемещать только выбранный GraphPane

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

Как найти GpaphPane, по которому кликнули мышкой, я нашла. А вот как "привязать" его к горизонтальному скролу?

San4eZ 11.12.2017 - 10:54

Такой вот вопрос по ограничению масштабирования

Надеюсь, что сможете подсказать)
Суть в чем: есть некая железка, которая опрашивается с неким интервалом, у нее есть несколько параметров( состояние оконечных устройств один график и температура/влажность второй), которые надо отразить на графиках. Суть в чем: сделал на masterPane, с синхронизацией по Х и ограничением масштаба как тут в примерах было. Два вопроса: 1. Почему могут при изменениях масштаба пропадать кривые? И 2. Мин и макс по оси У у меня разные, но периодически ось У на графике с температурой получает значение макс как на втором графике где косяк может быть?


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