Back to Devexpress

How to: Use Custom Measure Units in an Automatic Numeric Scale Mode

windowsforms-115274-controls-and-libraries-chart-control-examples-creating-charts-data-representation-how-to-use-custom-measure-units-in-an-automatic-numeric-scale-mode.md

latest2.9 KB
Original Source

How to: Use Custom Measure Units in an Automatic Numeric Scale Mode

  • Nov 13, 2018

To use a custom Numeric measure unit for an Automatic scale mode, assign an object of a class implementing the INumericMeasureUnitsCalculator interface to the NumericScaleOptions.AutomaticMeasureUnitsCalculator property of AxisBase.NumericScaleOptions.

csharp
private void Form1_Load(object sender, EventArgs e) {
        chart.Series.Add(GenerateSeries(10000));

        XYDiagram diagram = chart.Diagram as XYDiagram;
        if (diagram == null) return;

        diagram.AxisX.NumericScaleOptions.AggregateFunction = AggregateFunction.Average;
        diagram.AxisX.NumericScaleOptions.ScaleMode = ScaleMode.Automatic;
        diagram.AxisX.NumericScaleOptions.AutomaticMeasureUnitsCalculator = new CustomNumericMeasureUnitCalculator();

        diagram.AxisY.WholeRange.AlwaysShowZeroLevel = false;
    }
class CustomNumericMeasureUnitCalculator : INumericMeasureUnitsCalculator {
    public double CalculateMeasureUnit(
            IEnumerable<Series> series, 
            double axisLength, 
            int pixelsPerUnit, 
            double visualMin, 
            double visualMax, 
            double wholeMin, 
            double wholeMax) {
        double visualRange = visualMax - visualMin;
        return Math.Ceiling(visualRange / 20);
    }
}
vb
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
        chart.Series.Add(GenerateSeries(10000))

        Dim diagram As XYDiagram = TryCast(chart.Diagram, XYDiagram)
        If diagram Is Nothing Then
            Return
        End If

        diagram.AxisX.NumericScaleOptions.AggregateFunction = AggregateFunction.Average
        diagram.AxisX.NumericScaleOptions.ScaleMode = ScaleMode.Automatic
        diagram.AxisX.NumericScaleOptions.AutomaticMeasureUnitsCalculator = New CustomNumericMeasureUnitCalculator()

        diagram.AxisY.WholeRange.AlwaysShowZeroLevel = False
    End Sub
Friend Class CustomNumericMeasureUnitCalculator
    Implements INumericMeasureUnitsCalculator

    Public Function CalculateMeasureUnit(
            ByVal series As IEnumerable(Of Series),
            ByVal axisLength As Double,
            ByVal pixelsPerUnit As Integer,
            ByVal visualMin As Double,
            ByVal visualMax As Double,
            ByVal wholeMin As Double,
            ByVal wholeMax As Double) As Double Implements INumericMeasureUnitsCalculator.CalculateMeasureUnit
        Dim visualRange As Double = visualMax - visualMin
        Return Math.Ceiling(visualRange / 20)
    End Function
End Class