WPF LiveChartsCore.SkiaSharpView.WPF -version 2.0.0-rc5.4
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; } } }