# Charts ยท Other types
> Radar, scatter, bubbles, heatmap and treemap.
Source page: https://doc.astrolui.com/chart/examples/more
Each example is a complete component: copy its code (markup and **@code**), including the sample data, and replace it with yours.
## Radar
One series per person, created with **@foreach** by filtering the same list.
```razor
@using AstrolCharts
@* One series per person: each one filters the same list. *@
@foreach (var person in scores.Select(s => s.Person).Distinct())
{
}
@code {
private readonly List scores = new()
{
new() { Person = "Ana", Skill = "C#", Score = 9 },
new() { Person = "Ana", Skill = "SQL", Score = 7 },
new() { Person = "Ana", Skill = "CSS", Score = 5 },
new() { Person = "Ana", Skill = "Testing", Score = 8 },
new() { Person = "Ana", Skill = "Design", Score = 4 },
new() { Person = "Luis", Skill = "C#", Score = 6 },
new() { Person = "Luis", Skill = "SQL", Score = 9 },
new() { Person = "Luis", Skill = "CSS", Score = 8 },
new() { Person = "Luis", Skill = "Testing", Score = 5 },
new() { Person = "Luis", Skill = "Design", Score = 7 },
};
public class SkillScore
{
public string Person { get; set; } = string.Empty;
public string Skill { get; set; } = string.Empty;
public decimal Score { get; set; }
}
}
```
## Scatter
**XAxisType.Numeric**: each object is an (x, y) point. One series per group.
```razor
@using AstrolCharts
@* Numeric X axis: each point is an (x, y) pair. *@
@foreach (var group in measures.Select(m => m.Group).Distinct())
{
}
@code {
private readonly AstrolChartOptions options = new()
{
Xaxis = new XAxis { Title = new AxisTitle { Text = "Height (cm)" }, TickAmount = 6 },
Yaxis = new List { new YAxis { Title = new AxisTitle { Text = "Weight (kg)" } } },
Markers = new Markers { Size = 7 },
};
private readonly List measures = new()
{
new() { Group = "Women", Height = 158, Weight = 52 },
new() { Group = "Women", Height = 162, Weight = 57 },
new() { Group = "Women", Height = 167, Weight = 60 },
new() { Group = "Women", Height = 171, Weight = 63 },
new() { Group = "Women", Height = 164, Weight = 66 },
new() { Group = "Men", Height = 170, Weight = 68 },
new() { Group = "Men", Height = 176, Weight = 74 },
new() { Group = "Men", Height = 181, Weight = 80 },
new() { Group = "Men", Height = 186, Weight = 85 },
new() { Group = "Men", Height = 174, Weight = 79 },
};
public class Measure
{
public string Group { get; set; } = string.Empty;
public decimal Height { get; set; }
public decimal Weight { get; set; }
}
}
```
## Bubbles
**AstrolBubbleSeries**: **YAggregate** gives the height (average price) and **ZAggregate** the size (count).
```razor
@using AstrolCharts
@* X = city, Y = average price, Z (bubble size) = number of sales. *@
@code {
private readonly AstrolChartOptions options = new()
{
Yaxis = new List { new YAxis { Title = new AxisTitle { Text = "Average price (k)" } } },
Fill = new Fill { Opacity = 0.7 },
};
private readonly List sales = new()
{
new() { City = "Lima", Price = 120 },
new() { City = "Lima", Price = 140 },
new() { City = "Lima", Price = 110 },
new() { City = "Bogota", Price = 95 },
new() { City = "Bogota", Price = 105 },
new() { City = "Madrid", Price = 310 },
new() { City = "Madrid", Price = 280 },
new() { City = "Madrid", Price = 330 },
new() { City = "Madrid", Price = 300 },
new() { City = "Quito", Price = 85 },
};
public class HouseSale
{
public string City { get; set; } = string.Empty;
public decimal Price { get; set; }
}
}
```
## Heatmap
**SeriesType.Heatmap**: each series is a row (day) and X the column (hour); the color shows the value.
```razor
@using AstrolCharts
@* One series (row) per day; X = hour. The color shows the value. *@
@foreach (var day in days)
{
}
@code {
private static readonly string[] days = { "Mon", "Tue", "Wed", "Thu", "Fri" };
private static readonly string[] hours = { "08h", "10h", "12h", "14h", "16h", "18h" };
private readonly AstrolChartOptions options = new()
{
Colors = new List { "#007bff" },
DataLabels = new DataLabels { Enabled = true },
};
// Deterministic sample data
private readonly List activity = days
.SelectMany((day, d) => hours.Select((hour, h) => new Activity { Day = day, Hour = hour, Count = (d * 7 + h * 13) % 40 + 5 }))
.ToList();
public class Activity
{
public string Day { get; set; } = string.Empty;
public string Hour { get; set; } = string.Empty;
public decimal Count { get; set; }
}
}
```
## Treemap
**SeriesType.Treemap**: each rectangle's area is proportional to its value.
```razor
@using AstrolCharts
@* Each rectangle's area is proportional to its value. *@
@code {
private readonly AstrolChartOptions options = new()
{
PlotOptions = new PlotOptions { Treemap = new PlotOptionsTreemap { Distributed = true, EnableShades = false } },
Legend = new Legend { Show = false },
};
private readonly List folders = new()
{
new() { Name = "Videos", SizeGb = 210 },
new() { Name = "Photos", SizeGb = 120 },
new() { Name = "Projects", SizeGb = 95 },
new() { Name = "Music", SizeGb = 48 },
new() { Name = "Documents", SizeGb = 22 },
new() { Name = "Downloads", SizeGb = 64 },
new() { Name = "Backups", SizeGb = 150 },
};
public class Folder
{
public string Name { get; set; } = string.Empty;
public decimal SizeGb { get; set; }
}
}
```