is there a more efficient way to get the min/max y values of all axes than to perform the following steps
1. get min/max x-values per series grouped by axis by calling series.GetXMinMax(out xMin, out xMax)
2. get min/max y-value per series grouped by axis by calling series.GetMinMaxFromXRange(out yMin, out yMax, xMin, xMax, true)
I tried to use axis.GetSeriesMinMax(out min, out max) but it didn't return the right values when no data was visible in the current chart area (data is outside current visible axes values)
Following is the code I'm now using:
Code: Select all
double[] xAxisMinimums = Enumerable.Repeat(double.MaxValue, this.Chart.ViewXY.XAxes.Count).ToArray();
double[] xAxisMaximums = Enumerable.Repeat(double.MinValue, this.Chart.ViewXY.XAxes.Count).ToArray();
// Get x-axes min/max
foreach (var seriesPerAxis in this.Chart.ViewXY.PointLineSeries.GroupBy(pls => pls.AssignXAxisIndex))
{
var xAxisIndex = seriesPerAxis.Key;
var xAxis = this.Chart.ViewXY.XAxes[xAxisIndex];
foreach (var series in seriesPerAxis)
{
double min, max;
if (series.GetXMinMax(out min, out max))
{
xAxisMinimums[xAxisIndex] = Math.Min(xAxisMinimums[xAxisIndex], min);
xAxisMaximums[xAxisIndex] = Math.Max(xAxisMaximums[xAxisIndex], max);
}
}
}
double[] yAxisMinimums = Enumerable.Repeat(double.MaxValue, this.Chart.ViewXY.YAxes.Count).ToArray();
double[] yAxisMaximums = Enumerable.Repeat(double.MinValue, this.Chart.ViewXY.YAxes.Count).ToArray();
// Get y-axes min/max
foreach (var seriesPerAxis in this.Chart.ViewXY.PointLineSeries.GroupBy(pls => pls.AssignYAxisIndex))
{
var yAxisIndex = seriesPerAxis.Key;
var yAxis = this.Chart.ViewXY.YAxes[yAxisIndex];
foreach (var series in seriesPerAxis)
{
double min, max;
if (series.GetMinMaxFromXRange(out min, out max, xAxisMinimums[series.AssignXAxisIndex], xAxisMaximums[series.AssignXAxisIndex], true))
{
yAxisMinimums[yAxisIndex] = Math.Min(yAxisMinimums[yAxisIndex], min);
yAxisMaximums[yAxisIndex] = Math.Max(yAxisMaximums[yAxisIndex], max);
}
}
}