当前位置:   article > 正文

.NET开源、功能强大、跨平台的图表库 - LiveCharts2

.NET开源、功能强大、跨平台的图表库 - LiveCharts2

前言

今天大姚给大家分享一个.NET开源(MIT License)、功能强大、简单、灵活、跨平台的图表、地图和仪表库:LiveCharts2。

项目介绍

LiveCharts2是一个.NET开源、简单、灵活、交互式且功能强大的.NET图表、地图和仪表,现在几乎可以在任何地方运行如:Maui、Uno Platform、Blazor-wasm、WPF、WinForms、Xamarin、Avalonia、WinUI、UWP。

项目源代码

Blazor Wasm中快速使用

创建Blazor WebAssembly项目

安装NuGet

NuGet包管理器中搜索:LiveChartsCore.SkiaSharpView.Blazor 点击安装。

 注意:该包目前仍处于预发行阶段,尚未有正式版,很多同学反馈说找不到,是因为没有勾选:包括预发行版

Basic Bars

View Model
  1. using CommunityToolkit.Mvvm.ComponentModel;
  2. using LiveChartsCore;
  3. using LiveChartsCore.SkiaSharpView;
  4. using LiveChartsCore.SkiaSharpView.Painting;
  5. using SkiaSharp;
  6. namespace ViewModelsSamples.Bars.Basic;
  7. public partial class ViewModel : ObservableObject
  8. {
  9.     public ISeries[] Series { getset; } =
  10.     {
  11.         new ColumnSeries<double>
  12.         {
  13.             Name = "Mary",
  14.             Values = new double[] { 254 }
  15.         },
  16.         new ColumnSeries<double>
  17.         {
  18.             Name = "Ana",
  19.             Values = new double[] { 316 }
  20.         }
  21.     };
  22.     public Axis[] XAxes { getset; } =
  23.     {
  24.         new Axis
  25.         {
  26.             Labels = new string[] { "Category 1""Category 2""Category 3" },
  27.             LabelsRotation = 0,
  28.             SeparatorsPaint = new SolidColorPaint(new SKColor(200200200)),
  29.             SeparatorsAtCenter = false,
  30.             TicksPaint = new SolidColorPaint(new SKColor(353535)),
  31.             TicksAtCenter = true,
  32.             // By default the axis tries to optimize the number of 
  33.             // labels to fit the available space
  34.             // when you need to force the axis to show all the labels then you must: 
  35.             ForceStepToMin = true
  36.             MinStep = 1 
  37.         }
  38.     };
  39. }
HTML
  1. @page "/Bars/Basic"
  2. @using LiveChartsCore.SkiaSharpView.Blazor
  3. @using ViewModelsSamples.Bars.Basic
  4. <CartesianChart
  5.  Series="ViewModel.Series"
  6.  XAxes="ViewModel.XAxes"
  7.  LegendPosition="LiveChartsCore.Measure.LegendPosition.Right">
  8. </CartesianChart>
  9. @code {
  10.  public ViewModel ViewModel { getset; } = new();
  11. }

Delayed Animations

View model
  1. using System;
  2. using System.Collections.Generic;
  3. using CommunityToolkit.Mvvm.ComponentModel;
  4. using LiveChartsCore;
  5. using LiveChartsCore.Drawing;
  6. using LiveChartsCore.Kernel;
  7. using LiveChartsCore.SkiaSharpView;
  8. using LiveChartsCore.SkiaSharpView.Drawing.Geometries;
  9. namespace ViewModelsSamples.Bars.DelayedAnimation;
  10. public partial class ViewModel : ObservableObject
  11. {
  12.     public ViewModel()
  13.     {
  14.         var values1 = new List<float>();
  15.         var values2 = new List<float>();
  16.         var fx = EasingFunctions.BounceInOut; // this is the function we are going to plot
  17.         var x = 0f;
  18.         while (x <= 1)
  19.         {
  20.             values1.Add(fx(x));
  21.             values2.Add(fx(x - 0.15f));
  22.             x += 0.025f;
  23.         }
  24.         var columnSeries1 = new ColumnSeries<float>
  25.         {
  26.             Values = values1,
  27.             Stroke = null,
  28.             Padding = 2
  29.         };
  30.         var columnSeries2 = new ColumnSeries<float>
  31.         {
  32.             Values = values2,
  33.             Stroke = null,
  34.             Padding = 2
  35.         };
  36.         columnSeries1.PointMeasured += OnPointMeasured;
  37.         columnSeries2.PointMeasured += OnPointMeasured;
  38.         Series = new List<ISeries> { columnSeries1, columnSeries2 };
  39.     }
  40.     private void OnPointMeasured(ChartPoint<float, RoundedRectangleGeometry, LabelGeometry> point)
  41.     {
  42.         var perPointDelay = 100// milliseconds
  43.         var delay = point.Context.Entity.MetaData!.EntityIndex * perPointDelay;
  44.         var speed = (float)point.Context.Chart.AnimationsSpeed.TotalMilliseconds + delay;
  45.         point.Visual?.SetTransition(
  46.             new Animation(progress =>
  47.             {
  48.                 var d = delay / speed;
  49.                 return progress <= d
  50.                     ? 0
  51.                     : EasingFunctions.BuildCustomElasticOut(1.5f, 0.60f)((progress - d) / (1 - d));
  52.             },
  53.             TimeSpan.FromMilliseconds(speed)));
  54.     }
  55.     public List<ISeries> Series { getset; }
  56. }
HTML
  1. @page "/Bars/DelayedAnimation"
  2. @using LiveChartsCore.SkiaSharpView.Blazor
  3. @using ViewModelsSamples.Bars.DelayedAnimation
  4. <CartesianChart
  5.  Series="ViewModel.Series">
  6. </CartesianChart>
  7. @code {
  8.  public ViewModel ViewModel { getset; } = new();
  9. }

项目更多图表截图

项目源码地址

更多项目实用功能和特性欢迎前往项目开源地址查看

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/568208
推荐阅读
相关标签