Шпаргалка по 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);
}
}
{
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.