# Charts · Ranges and finance
> Timeline (Gantt), range area, candlesticks and box plot.
Source page: https://doc.astrolui.com/chart/examples/ranges
Each example is a complete component: copy its code (markup and **@code**), including the sample data, and replace it with yours.
## Timeline (Gantt)
**AstrolRangeSeries** with **YMinValue** / **YMaxValue** in Unix milliseconds, horizontal bars and **XAxisType.Datetime**.
```razor
@using AstrolCharts
@* Timeline (Gantt): a bar from YMinValue to YMaxValue per task. Dates go as Unix milliseconds. *@
@code {
private readonly AstrolChartOptions options = new()
{
PlotOptions = new PlotOptions { Bar = new PlotOptionsBar { Horizontal = true, Distributed = true, BorderRadius = 4 } },
Legend = new Legend { Show = false },
};
private static readonly DateTimeOffset start = new(2026, 1, 5, 0, 0, 0, TimeSpan.Zero);
private readonly List tasks = new()
{
new() { Name = "Analysis", Start = start, End = start.AddDays(10) },
new() { Name = "Design", Start = start.AddDays(7), End = start.AddDays(21) },
new() { Name = "Development", Start = start.AddDays(18), End = start.AddDays(50) },
new() { Name = "Testing", Start = start.AddDays(45), End = start.AddDays(60) },
new() { Name = "Release", Start = start.AddDays(60), End = start.AddDays(63) },
};
public class ProjectTask
{
public string Name { get; set; } = string.Empty;
public DateTimeOffset Start { get; set; }
public DateTimeOffset End { get; set; }
}
}
```
## Range area
**AstrolRangeAreaSeries** (band between **Bottom** and **Top**) combined with a line.
```razor
@using AstrolCharts
@* Band between the minimum (Bottom) and maximum (Top) temperature, with the average as a line. *@
@code {
private readonly AstrolChartOptions options = new()
{
Stroke = new Stroke { Curve = Curve.Smooth, Width = new List { 0, 3 } },
Fill = new Fill { Opacity = new List { 0.25, 1 } },
Yaxis = new List { new YAxis { Title = new AxisTitle { Text = "°C" } } },
};
private readonly List temperatures = new()
{
new() { Month = "Jan", Min = 2, Max = 11, Average = 6 },
new() { Month = "Feb", Min = 3, Max = 13, Average = 8 },
new() { Month = "Mar", Min = 6, Max = 17, Average = 11 },
new() { Month = "Apr", Min = 8, Max = 20, Average = 14 },
new() { Month = "May", Min = 12, Max = 25, Average = 18 },
new() { Month = "Jun", Min = 16, Max = 30, Average = 23 },
};
public class Temperature
{
public string Month { get; set; } = string.Empty;
public decimal Min { get; set; }
public decimal Max { get; set; }
public decimal Average { get; set; }
}
}
```
## Candlesticks
**AstrolCandleSeries** with **Open**, **High**, **Low** and **Close** per date.
```razor
@using AstrolCharts
@* Open, high, low and close per day. Green = closed up, red = closed down. *@
@code {
private readonly List prices = Generate();
// Deterministic sample: 20 trading days
private static List Generate()
{
var list = new List();
var date = new DateTimeOffset(2026, 3, 2, 0, 0, 0, TimeSpan.Zero);
decimal close = 100;
for (int i = 0; i < 20; i++)
{
var open = close;
close = open + ((i * 37) % 11 - 5);
list.Add(new StockDay
{
Date = date.AddDays(i),
Open = open,
Close = close,
High = Math.Max(open, close) + (i % 3) + 1,
Low = Math.Min(open, close) - (i % 4) - 1,
});
}
return list;
}
public class StockDay
{
public DateTimeOffset Date { get; set; }
public decimal Open { get; set; }
public decimal High { get; set; }
public decimal Low { get; set; }
public decimal Close { get; set; }
}
}
```
## Box plot
**AstrolBoxPlotSeries**: minimum, quartiles, median and maximum per group.
```razor
@using AstrolCharts
@* Distribution per group: minimum, first quartile, median, third quartile and maximum. *@
@code {
private readonly List times = new()
{
new() { Service = "Login", Min = 40, Q1 = 60, Median = 75, Q3 = 95, Max = 140 },
new() { Service = "Search", Min = 80, Q1 = 120, Median = 150, Q3 = 190, Max = 260 },
new() { Service = "Orders", Min = 55, Q1 = 70, Median = 90, Q3 = 115, Max = 170 },
new() { Service = "Reports", Min = 200, Q1 = 280, Median = 330, Q3 = 410, Max = 520 },
};
public class ResponseTime
{
public string Service { get; set; } = string.Empty;
public decimal Min { get; set; }
public decimal Q1 { get; set; }
public decimal Median { get; set; }
public decimal Q3 { get; set; }
public decimal Max { get; set; }
}
}
```