经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » Echarts » 查看文章
.NET开源、功能强大、跨平台的图表库 - LiveCharts2
来源:cnblogs  作者:追逐时光者  时间:2024/5/6 16:18:10  对本文有异议

前言

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

 

项目介绍

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

项目源代码

Blazor Wasm中快速使用

创建Blazor WebAssembly项目

安装NuGet

  1. NuGet包管理器中搜索:LiveChartsCore.SkiaSharpView.Blazor 点击安装。
 注意:该包目前仍处于预发行阶段,尚未有正式版,很多同学反馈说找不到,是因为没有勾选:包括预发行版

Basic Bars

View Model

  1. using CommunityToolkit.Mvvm.ComponentModel;
    using LiveChartsCore;
    using LiveChartsCore.SkiaSharpView;
    using LiveChartsCore.SkiaSharpView.Painting;
    using SkiaSharp;

    namespace ViewModelsSamples.Bars.Basic;

    public partial class ViewModel : ObservableObject
    {
        public ISeries[] Series { get; set; } =
        {
            new ColumnSeries<double>
            {
                Name = "Mary",
                Values = new double[] { 2, 5, 4 }
            },
            new ColumnSeries<double>
            {
                Name = "Ana",
                Values = new double[] { 3, 1, 6 }
            }
        };

        public Axis[] XAxes { get; set; } =
        {
            new Axis
            {
                Labels = new string[] { "Category 1", "Category 2", "Category 3" },
                LabelsRotation = 0,
                SeparatorsPaint = new SolidColorPaint(new SKColor(200, 200, 200)),
                SeparatorsAtCenter = false,
                TicksPaint = new SolidColorPaint(new SKColor(35, 35, 35)),
                TicksAtCenter = true,
                // By default the axis tries to optimize the number of 
                // labels to fit the available space, 
                // when you need to force the axis to show all the labels then you must: 
                ForceStepToMin = true, 
                MinStep = 1 
            }
        };
    }

HTML

  1. @page "/Bars/Basic"
    @using LiveChartsCore.SkiaSharpView.Blazor
    @using ViewModelsSamples.Bars.Basic

    <CartesianChart
     Series="ViewModel.Series"
     XAxes="ViewModel.XAxes"
     LegendPosition="LiveChartsCore.Measure.LegendPosition.Right">
    </CartesianChart>

    @code {
     public ViewModel ViewModel { get; set; } = new();
    }

Delayed Animations

View model

  1. using System;
    using System.Collections.Generic;
    using CommunityToolkit.Mvvm.ComponentModel;
    using LiveChartsCore;
    using LiveChartsCore.Drawing;
    using LiveChartsCore.Kernel;
    using LiveChartsCore.SkiaSharpView;
    using LiveChartsCore.SkiaSharpView.Drawing.Geometries;

    namespace ViewModelsSamples.Bars.DelayedAnimation;

    public partial class ViewModel : ObservableObject
    {
        public ViewModel()
        {
            var values1 = new List<float>();
            var values2 = new List<float>();

            var fx = EasingFunctions.BounceInOut; // this is the function we are going to plot
            var x = 0f;

            while (<= 1)
            {
                values1.Add(fx(x));
                values2.Add(fx(- 0.15f));
                x += 0.025f;
            }

            var columnSeries1 = new ColumnSeries<float>
            {
                Values = values1,
                Stroke = null,
                Padding = 2
            };

            var columnSeries2 = new ColumnSeries<float>
            {
                Values = values2,
                Stroke = null,
                Padding = 2
            };

            columnSeries1.PointMeasured += OnPointMeasured;
            columnSeries2.PointMeasured += OnPointMeasured;

            Series = new List<ISeries> { columnSeries1, columnSeries2 };
        }

        private void OnPointMeasured(ChartPoint<float, RoundedRectangleGeometry, LabelGeometry> point)
        {
            var perPointDelay = 100; // milliseconds
            var delay = point.Context.Entity.MetaData!.EntityIndex * perPointDelay;
            var speed = (float)point.Context.Chart.AnimationsSpeed.TotalMilliseconds + delay;

            point.Visual?.SetTransition(
                new Animation(progress =>
                {
                    var d = delay / speed;

                    return progress <= d
                        ? 0
                        : EasingFunctions.BuildCustomElasticOut(1.5f, 0.60f)((progress - d) / (1 - d));
                },
                TimeSpan.FromMilliseconds(speed)));
        }

        public List<ISeries> Series { get; set; }
    }

HTML

  1. @page "/Bars/DelayedAnimation"
    @using LiveChartsCore.SkiaSharpView.Blazor
    @using ViewModelsSamples.Bars.DelayedAnimation

    <CartesianChart
     Series="ViewModel.Series">
    </CartesianChart>

    @code {
     public ViewModel ViewModel { get; set; } = new();
    }

项目更多图表截图

项目源码地址

更多项目实用功能和特性欢迎前往项目开源地址查看??,别忘了给项目一个Star支持??。

优秀项目和框架精选

该项目已收录到C#/.NET/.NET Core优秀项目和框架精选中,关注优秀项目和框架精选能让你及时了解C#、.NET和.NET Core领域的最新动态和最佳实践,提高开发工作效率和质量。坑已挖,欢迎大家踊跃提交PR推荐或自荐(让优秀的项目和框架不被埋没??)。

DotNetGuide技术社区交流群

  • DotNetGuide技术社区是一个面向.NET开发者的开源技术社区,旨在为开发者们提供全面的C#/.NET/.NET Core相关学习资料、技术分享和咨询、项目框架推荐、求职和招聘资讯、以及解决问题的平台。
  • 在DotNetGuide技术社区中,开发者们可以分享自己的技术文章、项目经验、学习心得、遇到的疑难技术问题以及解决方案,并且还有机会结识志同道合的开发者。
  • 我们致力于构建一个积极向上、和谐友善的.NET技术交流平台。无论您是初学者还是有丰富经验的开发者,我们都希望能为您提供更多的价值和成长机会。

欢迎加入DotNetGuide技术社区微信交流群??

原文链接:https://www.cnblogs.com/Can-daydayup/p/18166862

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号