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