I am using Blazorise library for chart streaming. I want to show in x axis not the realtime but only numbers from 0 to 1000. The chart should again contain the animation as it is so far.
Live-Chart looks this list: https://blazorise.com/docs/extensions/chart-live
This chart streaming is based on chartjs-plugin-streaming: https://nagix.github.io/chartjs-plugin-streaming/latest/guide/
<ChartStreaming @ref="@chartStreaming"
TItem="LiveDataPoint"
Options="new ChartStreamingOptions { Delay = 2000 }"
Refreshed="@OnHorizontalLineRefreshed" />
</LineChart>
<Row>
<Column>
<Button Color="Color.Primary" Clicked="@(()=>chartStreaming.Pause())">Pause</Button>
<Button Color="Color.Primary" Clicked="@(()=>chartStreaming.Play())">Play</Button>
</Column>
</Row>
@code{
LineChart<LiveDataPoint> horizontalLineChart;
ChartStreaming<LiveDataPoint> chartStreaming;
Random random = new Random( DateTime.Now.Millisecond );
string[] Labels = { "Red", "Blue", "Yellow", "Green", "Purple", "Orange" };
List<string> backgroundColors = new List<string> { ChartColor.FromRgba( 255, 99, 132, 0.2f ), ChartColor.FromRgba( 54, 162, 235, 0.2f ), ChartColor.FromRgba( 255, 206, 86, 0.2f ), ChartColor.FromRgba( 75, 192, 192, 0.2f ), ChartColor.FromRgba( 153, 102, 255, 0.2f ), ChartColor.FromRgba( 255, 159, 64, 0.2f ) };
List<string> borderColors = new List<string> { ChartColor.FromRgba( 255, 99, 132, 1f ), ChartColor.FromRgba( 54, 162, 235, 1f ), ChartColor.FromRgba( 255, 206, 86, 1f ), ChartColor.FromRgba( 75, 192, 192, 1f ), ChartColor.FromRgba( 153, 102, 255, 1f ), ChartColor.FromRgba( 255, 159, 64, 1f ) };
public struct LiveDataPoint
{
public object X { get; set; }
public object Y { get; set; }
}
object horizontalLineChartOptions = new
{
Scales = new
{
Y = new
{
Title = new
{
Display = true,
Text = "Value"
}
}
},
Interaction = new
{
intersect = false
}
};
protected override async Task OnAfterRenderAsync( bool firstRender )
{
if ( firstRender )
{
await Task.WhenAll(
HandleRedraw( horizontalLineChart, GetLineChartDataset1 ) );
}
}
async Task HandleRedraw<TDataSet, TItem, TOptions, TModel>( BaseChart<TDataSet, TItem, TOptions, TModel> chart, params Func<TDataSet>[] getDataSets )
where TDataSet : ChartDataset<TItem>
where TOptions : ChartOptions
where TModel : ChartModel
{
await chart.Clear();
await chart.AddLabelsDatasetsAndUpdate( Labels, getDataSets.Select( x => x.Invoke() ).ToArray() );
}
LineChartDataset<LiveDataPoint> GetLineChartDataset1()
{
return new LineChartDataset<LiveDataPoint>
{
Data = new List<LiveDataPoint>(),
Label = "Dataset 1 (linear interpolation)",
BackgroundColor = backgroundColors[0],
BorderColor = borderColors[0],
Fill = false,
Tension = 0,
BorderDash = new List<int> { 8, 4 },
};
}
Task OnHorizontalLineRefreshed( ChartStreamingData<LiveDataPoint> data )
{
data.Value = new LiveDataPoint
{
X = DateTime.Now,
Y = RandomScalingFactor(),
};
return Task.CompletedTask;
}
double RandomScalingFactor()
{
return ( random.NextDouble() > 0.5 ? 1.0 : -1.0 ) * Math.Round( random.NextDouble() * 100 );
}
}```