Масштаб 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;
}
}