wpf-devexpress-dot-xpf-dot-charts-dot-itimespanmeasureunitscalculator-dot-calculatemeasureunit-x28-ienumerable-series-double-int32-double-double-double-double-x29.md
Calculates the date-time measurement unit that an axis should use for display.
Namespace : DevExpress.Xpf.Charts
Assembly : DevExpress.Xpf.Charts.v25.2.dll
NuGet Package : DevExpress.Wpf.Charts
TimeSpanMeasureUnit CalculateMeasureUnit(
IEnumerable<Series> series,
double axisLength,
int pixelsPerUnit,
double visualMin,
double visualMax,
double wholeMin,
double wholeMax
)
Function CalculateMeasureUnit(
series As IEnumerable(Of Series),
axisLength As Double,
pixelsPerUnit As Integer,
visualMin As Double,
visualMax As Double,
wholeMin As Double,
wholeMax As Double
) As TimeSpanMeasureUnit
| Name | Type | Description |
|---|---|---|
| series | IEnumerable<Series> |
All Series associated with the axis.
| | axisLength | Double |
The length of the axis’s visual range in pixels.
| | pixelsPerUnit | Int32 |
The minimum count of pixels that series require to draw their points correctly.
| | visualMin | Double |
The visual range’s minimum value in milliseconds.
| | visualMax | Double |
The visual range’s maximum value in milliseconds.
| | wholeMin | Double |
The whole range’s minimum value in milliseconds.
| | wholeMax | Double |
The whole range’s maximum value in milliseconds.
|
| Type | Description |
|---|---|
| TimeSpanMeasureUnit |
The calculated measurement unit.
|
Bars can overlap each other if the calculated measurement unit covers fewer pixels on the axis than the pixelPerUnit parameter specifies.
The automatic time-span scale options allow you to create a measurement unit calculator to determine the current measurement unit if the predefined one does not fit your requirements. Create a class that implements the ITimeSpanMeasureUnitsCalculator interface and assign it to the AutomaticMeasureUnitsCalculator property to use a custom measurement units calculation algorithm:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:TimeSpanExample"
xmlns:dxc="http://schemas.devexpress.com/winfx/2008/xaml/charts"
x:Class="TimeSpanExample.MainWindow"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Window.DataContext>
<local:ChartViewModel/>
</Window.DataContext>
<Grid>
<dxc:ChartControl>
<dxc:XYDiagram2D>
<dxc:XYDiagram2D.AxisX>
<dxc:AxisX2D>
<dxc:AxisX2D.TimeSpanScaleOptions>
<dxc:AutomaticTimeSpanScaleOptions AggregateFunction="Average">
<dxc:AutomaticTimeSpanScaleOptions.AutomaticMeasureUnitsCalculator>
<local:CustomAutomaticTimeSpanMeasureUnitsCalculator/>
</dxc:AutomaticTimeSpanScaleOptions.AutomaticMeasureUnitsCalculator>
</dxc:AutomaticTimeSpanScaleOptions>
</dxc:AxisX2D.TimeSpanScaleOptions>
</dxc:AxisX2D>
</dxc:XYDiagram2D.AxisX>
</dxc:XYDiagram2D>
</dxc:ChartControl>
</Grid>
</Window>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using DevExpress.Xpf.Charts;
namespace TimeSpanExample {
public class CustomAutomaticTimeSpanMeasureUnitsCalculator : ITimeSpanMeasureUnitsCalculator {
public TimeSpanMeasureUnit CalculateMeasureUnit(IEnumerable<Series> series,
double axisLength, int pixelsPerUnit,
double visualMin, double visualMax,
double wholeMin, double wholeMax) {
double rawMeasureUnit = (visualMax - visualMin) / axisLength * pixelsPerUnit;
return PickTimeSpanMeasureUnit(rawMeasureUnit);
}
static int[] unitMultipliers = { 1, 1000, 60, 60, 24 };
static TimeSpanMeasureUnit PickTimeSpanMeasureUnit(double milliseconds) {
double valueStop = 1.0;
for (int i = 0; i < unitMultipliers.Length; i++) {
valueStop *= unitMultipliers[i];
if (milliseconds <= valueStop)
return (TimeSpanMeasureUnit)i;
}
return TimeSpanMeasureUnit.Hour;
}
}
}
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Windows
Imports DevExpress.Xpf.Charts
Namespace TimeSpanExample
Public Class CustomAutomaticTimeSpanMeasureUnitsCalculator
Implements ITimeSpanMeasureUnitsCalculator
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 TimeSpanMeasureUnit Implements ITimeSpanMeasureUnitsCalculator.CalculateMeasureUnit
Dim rawMeasureUnit As Double = (visualMax - visualMin) / axisLength * pixelsPerUnit
Return PickTimeSpanMeasureUnit(rawMeasureUnit)
End Function
Private Shared unitMultipliers() As Integer = { 1, 1000, 60, 60, 24 }
Private Shared Function PickTimeSpanMeasureUnit(ByVal milliseconds As Double) As TimeSpanMeasureUnit
Dim valueStop As Double = 1.0
For i As Integer = 0 To unitMultipliers.Length - 1
valueStop *= unitMultipliers(i)
If milliseconds <= valueStop Then
Return CType(i, TimeSpanMeasureUnit)
End If
Next i
Return TimeSpanMeasureUnit.Hour
End Function
End Class
End Namespace
See Also
ITimeSpanMeasureUnitsCalculator Interface