Alpha
Alpha

Reputation: 11

Equal scale for both of X and Y in Zedgraph chart

Based on my experience with Zedgraph I could not set both of X and Y axes scale same to have a correct scatter graph! Assume we have a square grid of 10x10m cells in which each cell is a square shape 1x1m. when we try to draw points of such data, the output is not acceptable because each axis scaled to different scale. It is worse when we try to call Zoomall, then we find all points are fitted to chart area regardless their equal spacing! I hope someone can help me to find a solution. Although Zedgraph is flexible library but this is a big fault!

Upvotes: 1

Views: 1718

Answers (3)

stenio
stenio

Reputation: 377

I recently had to solve the same problem. This is what has worked for me:

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();

With the first call to AxisChange the control automatically calculate the correct values for my data. Then I copy the relevant parameters from one scale to the other one and apply the change.

Upvotes: 0

BoJl4apa
BoJl4apa

Reputation: 39

perfectly aware, this q. is 9 years old, but still.. Have just encountered and solved the issue of presenting the graph in a square pane. (It seems that was the OP question) It's a bit "brute" and invokes redundant redraws, but gets the job done.

        //"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);
        };

Upvotes: 1

user423430
user423430

Reputation: 3704

Is Scale.IsAnyOrdinal true for any Axis.Scale's ?

ZedGraph appears to position nodes based on index offset rather than node value when the Scale.Type is set to AxisType.Text, Ordinal, DateAsOrdinal, or LinearAsOrdinal.

Upvotes: 0

Related Questions