install-package LiveChartsCore.SkiaSharpView.WPF -version 2.0.0-rc5.4
//xaml
<Window x:Class="WpfApp30.MainWindow"
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:WpfApp30"
mc:Ignorable="d"
WindowState="Maximized"
xmlns:lvc="clr-namespace:LiveChartsCore.SkiaSharpView.WPF;assembly=LiveChartsCore.SkiaSharpView.WPF"
Title="MainWindow" Height="450" Width="800">
<Grid>
<lvc:CartesianChart
Series="{Binding Series}"
XAxes="{Binding XAxes}"
YAxes="{Binding YAxes}"/>
</Grid>
</Window>
//.cs
using LiveChartsCore;
using LiveChartsCore.Defaults;
using LiveChartsCore.SkiaSharpView;
using LiveChartsCore.SkiaSharpView.Painting;
using SkiaSharp;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace WpfApp30
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public ISeries[] Series { get; set; }
public Axis[] XAxes { get; set; }
public Axis[] YAxes { get; set; }
List<XY> xyPtsList = new List<XY>();
public MainWindow()
{
InitializeComponent();
this.DataContext=this;
InitData();
}
void InitData()
{
InitXYPtsList();
// Convert to scatter series
var scatterSeries = new ScatterSeries<ObservablePoint>
{
Values = ConvertPoints(xyPtsList.Where(x => x.X>0)?.ToList()),
GeometrySize = 20,
Fill = new SolidColorPaint(SKColors.Red),
Stroke = new SolidColorPaint(SKColors.Red, 2),
XToolTipLabelFormatter=x => $"X:{x.Model.X}",
YToolTipLabelFormatter=y => $"Y:{y.Model.Y:N4}"
};
Series = new ISeries[] { scatterSeries };
XAxes=new Axis[]
{
new Axis
{
Name="X Axis",
NamePadding=new LiveChartsCore.Drawing.Padding(0,15),
Labeler=value=>value.ToString("N0"),
MinStep=5,
UnitWidth=5
}
};
YAxes=new Axis[]
{
new Axis
{
Name="Y Axis",
NamePadding=new LiveChartsCore.Drawing.Padding(0,15),
Labeler=value=>value.ToString("N4"),
MinStep=5,
UnitWidth=5
}
};
}
private void InitXYPtsList()
{
xyPtsList.Clear();
Random rnd = new Random();
for (int i = 0; i<99; i+=10)
{
xyPtsList.Add(new XY(i, rnd.Next(0, 200)));
}
xyPtsList.Add(new XY(100, 200));
}
private static ObservablePoint[] ConvertPoints(List<XY> points)
{
return points.Select(p => new ObservablePoint(p.X, p.Y)).ToArray();
}
}
public struct XY
{
public XY(int xValue, double yValue)
{
X= xValue;
Y= yValue;
}
public int X { get; set; }
public double Y { get; set; }
}
}
![image]()