~/cartesianChart/legends.md
Legends
A legend is a visual element that displays a list with the name, stroke and fills of the series in a chart:
You can place a legend at Top
, Bottom
, Left
, Right
or Hidden
positions, notice the Hidden
position will
disable legends in a chart, default value is Hidden
.
Customize default legends
You can quickly change the position, the font, the text size or the background color:
using Eto.Forms;
using LiveChartsCore.SkiaSharpView.Eto;
using ViewModelsSamples.Axes.Multiple;
namespace EtoFormsSample.Axes.Multiple;
public class View : Panel
{
private readonly CartesianChart cartesianChart;
public View()
{
var viewModel = new ViewModel();
cartesianChart = new CartesianChart
{
Series = viewModel.Series,
YAxes = viewModel.YAxes,
LegendPosition = LiveChartsCore.Measure.LegendPosition.Left,
LegendTextPaint = viewModel.LegendTextPaint,
LegendBackgroundPaint = viewModel.LedgendBackgroundPaint,
LegendTextSize = 16
};
Content = cartesianChart;
}
}
View model
[ObservableObject]
public partial class ViewModel
{
public ISeries[] Series { get; set; } = { ... };
public Axis[] YAxes { get; set; } = { ... };
public SolidColorPaint LegendTextPaint { get; set; } = // mark
new SolidColorPaint // mark
{ // mark
Color = new SKColor(50, 50, 50), // mark
SKTypeface = SKTypeface.FromFamilyName("Courier New") // mark
}; // mark
public SolidColorPaint LedgendBackgroundPaint { get; set; } = // mark
new SolidColorPaint(new SKColor(240, 240, 240)); // mark
}
Tooltip control from scratch
You can also create your own legend, the recommended way is to use the LiveCharts API (example bellow) but you can
use anything as tooltip as soon as it implements the IChartLegend<T>
interface. At the following example we build
a custom control to render legends in our charts using the LiveCharts API.
CustomLegend.cs
using System.Linq;
using LiveChartsCore;
using LiveChartsCore.Drawing;
using LiveChartsCore.Drawing.Layouts;
using LiveChartsCore.SkiaSharpView.Drawing;
using LiveChartsCore.SkiaSharpView.Drawing.Layouts;
using LiveChartsCore.SkiaSharpView.SKCharts;
namespace ViewModelsSamples.General.TemplatedLegends;
public class CustomLegend : SKDefaultLegend
{
protected override Layout<SkiaSharpDrawingContext> GetLayout(Chart chart)
{
var stackLayout = new StackLayout
{
Orientation = ContainerOrientation.Vertical,
Padding = new Padding(15, 4),
HorizontalAlignment = Align.Start,
VerticalAlignment = Align.Middle,
};
foreach (var series in chart.Series.Where(x => x.IsVisibleAtLegend))
stackLayout.Children.Add(new LegendItem(series));
return stackLayout;
}
}
View
using Eto.Forms;
using LiveChartsCore.SkiaSharpView.Eto;
using ViewModelsSamples.General.TemplatedLegends;
namespace EtoFormsSample.General.TemplatedLegends;
public class View : Panel
{
private readonly CartesianChart cartesianChart;
public View()
{
var viewModel = new ViewModel();
cartesianChart = new CartesianChart
{
Series = viewModel.Series,
LegendPosition = LiveChartsCore.Measure.LegendPosition.Right,
Legend = new CustomLegend()
};
Content = cartesianChart;
}
}