在ZedGraph的所有图中重新缩放X.

时间:2011-11-28 23:27:05

标签: zedgraph

我可以使用以下代码在所有绘图中成功缩放x:

zg1.IsEnableHZoom = true;  
zg1.IsEnableVZoom = false;  
zg1.IsSynchronizeXAxes = true;  

foreach (GraphPane gp in zg1.MasterPane.paneList)  
{  
   > //What code can I put here?  
}  

我的问题是使用此代码时,Y轴将根据数据的原始视图保持最大值和最小值。我希望Y轴自动缩放,以便最大和最小值仅基于由于x轴缩放而可见的数据(当然,每个图形窗格)。是否有一些命令或暴力方法,我可以在上面显示的for循环中的每个图形窗格上使用?提前感谢任何人的帮助。

2 个答案:

答案 0 :(得分:1)

你可以在循环中使用它(假设X轴刻度MinAuto和MaxAuto为假)

foreach (GraphPane gp in zg1.MasterPane.paneList)  
{
    gp.YAxis.Scale.MinAuto = true;
    gp.YAxis.Scale.MaxAuto = true;

    // This will force ZedGraph to calculate the Min and the Max of the Y axis
    // based on the X axis visible range
    gp.IsBoundedRanges = true;
}

zg1.MasterPane.AxisChange();

答案 1 :(得分:0)

之前我遇到过同样的问题,除了检查所有曲线点之外找不到其他方法。

我在Paint事件中添加了一个事件处理程序来执行此操作,我确信有一些方法可以优化。

这样的事情:

  private void graph_Paint(object sender, PaintEventArgs e)
  {
    double min = Double.MaxValue;
    double max = Double.MinValue;

    CurveItem curve = graph.GraphPane.CurveList[0];
    for (int i = 0; i < curve.Points.Count; i++)
    {
      if (curve.Points[i].X > graph.GraphPane.XAxis.Scale.Min &&
          curve.Points[i].X < graph.GraphPane.XAxis.Scale.Max)
      {
        min = Math.Min(curve.Points[i].Y, min);
        max = Math.Max(curve.Points[i].Y, max);
      }
    }

    if (min != Double.MaxValue)
    {
      graph.GraphPane.XAxis.Scale.Min = min;
      graph.GraphPane.XAxis.Scale.Max = max;
    }
  }