Равный масштаб для X и Y в диаграмме Zedgraph

Основываясь на моем опыте работы с Zedgraph, я не смог установить одинаковую шкалу осей X и Y, чтобы получить правильный график разброса! Предположим, у нас есть квадратная сетка из 10x10 м ячеек, в которой каждая ячейка имеет квадратную форму 1x1 м. когда мы пытаемся нарисовать точки таких данных, результат не приемлем, потому что каждая ось масштабируется в разном масштабе. Хуже, когда мы пытаемся вызвать Zoomall, тогда мы обнаруживаем, что все точки подходят к области диаграммы, независимо от их равного расстояния! Надеюсь, кто-нибудь поможет мне найти решение. Хотя Zedgraph - гибкая библиотека, но это большая ошибка!


person Alpha    schedule 12.03.2010    source источник
comment
Чего именно вы хотите достичь? Чтобы установить одинаковые минимальные и максимальные значения для обеих шкал или нарисовать их таким образом, чтобы квадрат (в реальных данных) также отображался как квадрат (а не прямоугольное представление на основе текущих настроек масштабов)?   -  person Gacek    schedule 12.03.2010


Ответы (3)


прекрасно понимает, что это q. 9 лет, но все же .. Только что столкнулись и решили проблему представления графика в квадратной области. (Кажется, это был вопрос OP) Это немного «грубо» и вызывает избыточные перерисовки, но выполняет свою работу.

        //"GraphWinFormsHost" is my ZGraph container
        GraphWinFormsHost.SizeChanged += (sender, args) =>
        {
            //"IsEqualScale" is my property, indicating a square is needed
            if(_ChartData == null || !_ChartData.IsEqualScale)
                return;

            _ZedGraphControl.GraphPane.Chart.IsRectAuto = true;
            _ZedGraphControl.Refresh();

            //here, the graph pane is redrawn according to available space
            float x = _ZedGraphControl.GraphPane.Chart.Rect.X;
            float y = _ZedGraphControl.GraphPane.Chart.Rect.Y;
            float h = _ZedGraphControl.GraphPane.Chart.Rect.Height;
            float w = _ZedGraphControl.GraphPane.Chart.Rect.Width;
            float min = Math.Min(h, w);
            _ZedGraphControl.GraphPane.Chart.Rect = new RectangleF(x, y, min, min);
        };
person BoJl4apa    schedule 18.03.2019

Верно ли значение Scale.IsAnyOrdinal для любого Axis.Scale?

ZedGraph позиционирует узлы на основе смещения индекса, а не значения узла, когда Scale.Type имеет значение AxisType.Text, Ordinal, DateAsOrdinal или LinearAsOrdinal.

person user423430    schedule 14.01.2011

Мне недавно пришлось решать ту же проблему. Вот что у меня сработало:

zg1.AxisChange();
                
if (myPane.XAxis.Scale.Max > myPane.YAxis.Scale.Max) {
    myPane.YAxis.Scale.Max = myPane.XAxis.Scale.Max;
    myPane.YAxis.Scale.Min = myPane.XAxis.Scale.Min;
    myPane.YAxis.Scale.MajorStep = myPane.XAxis.Scale.MajorStep;
} else {
    myPane.XAxis.Scale.Max = myPane.YAxis.Scale.Max;
    myPane.XAxis.Scale.Min = myPane.YAxis.Scale.Min;
    myPane.XAxis.Scale.MajorStep = myPane.YAxis.Scale.MajorStep;
}

zg1.AxisChange();

При первом вызове AxisChange элемент управления автоматически вычисляет правильные значения для моих данных. Затем я копирую соответствующие параметры из одной шкалы в другую и применяю изменения.

person stenio    schedule 11.11.2020