Шпаргалка по ZedGraph. Как задавать координаты графических объектов относительно видимой части графика
В примере Как на графике рисовать линии, стрелки и писать текст было показно, как добавлять на график графические объекты. Там координаты объектов задавались в той же системе координат, что и точки на графике, однако, это не всегда удобно. Если нужно, чтобы графические объекты находились всегда в определенном месте независимо от положения графика, то можно использовать другие системы координат.
Данный пример показывает, как использовать систему координат, привязанную к прямоугольной области, где рисуется график. Координата (0; 0) соответствует левому верхнему углу, а координата (1; 1) - правому нижнему.
Для переключения системы координат используется перечисление типа CoordType.
Все примеры объединены в одном solution для Visual Studio 2005 и написаны на языке C#, скачать их можно отсюда.
Проект в примере - CoordTypeChartFraction
{
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.