Масштаб X на всех участках в 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 ответа

Вы можете использовать это в цикле (предполагая, что масштаб оси 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();

У меня была такая же проблема раньше, и я не мог найти другой способ, кроме как проверить все точки кривой.

Я добавил обработчик события в событие 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;
    }
  }
Другие вопросы по тегам