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

net,livecharts2 · 浏览次数 : 16

小编点评

**ViewModel.cs** ```csharp // ColumnSeries data model public class ColumnSeries { public float[] Values { get; set; } public string Stroke { get; set; } public int Padding { get; set; } } // PointMeasured event handler private void OnPointMeasured(ChartPoint point) { // Create animations for each column series var perPointDelay = 100; // milliseconds var delay = point.Context.Entity.MetaData!.EntityIndex * perPointDelay; var speed = (float)point.Context.Chart.AnimationsSpeed.TotalMilliseconds + delay; // Set transition for each series with custom elastic out animation point.Visual?.SetTransition(new Animation(progress => { var d = delay / speed; return progress <= d ? EasingFunctions.BuildCustomElasticOut(1.5f, 0.60f)((progress - d) / (1 - d)) : 0; }, d, TimeSpan.FromMilliseconds(speed))); } ``` **HTML** ```html ``` **项目用途** 该项目是一个 C#/.NET Core 应用程序,用于创建图表。它包含一个 ColumnSeries 数据模型,用于存储图表数据,以及一个 OnPointMeasured 事件处理程序,用于在每个数据点上绘制动画。

正文

前言

今天大姚给大家分享一个.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

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

@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

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 (x <= 1)
        {
            values1.Add(fx(x));
            values2.Add(fx(x - 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

@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技术社区微信交流群👪

与.NET开源、功能强大、跨平台的图表库 - LiveCharts2相似的内容:

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

前言 今天大姚给大家分享一个.NET开源(MIT License)、功能强大、简单、灵活、跨平台的图表、地图和仪表库:LiveCharts2。 项目介绍 LiveCharts2是一个.NET开源、简单、灵活、交互式且功能强大的.NET图表、地图和仪表,现在几乎可以在任何地方运行如:Maui、Uno

一款.NET开源、功能强大、跨平台的绘图库 - OxyPlot

前言 今天大姚给大家分享一款.NET开源(MIT License)、免费、跨平台、功能强大的绘图库,支持多平台使用(包括:WPF、UWP、WinForm、Silverlight、Xamarin.iOS、Xamarin.Android、Xamarin.Forms 和 Xamarin.Mac等):Oxy

Blazor Hybrid (Blazor混合开发)更好的读取本地图片

在 Blazor Hybrid 应用中,Razor 组件在设备上本机运行。 组件通过本地互操作通道呈现到嵌入式 Web View 控件。 组件不在浏览器中运行,并且不涉及 WebAssembly。 Razor 组件可快速加载和执行代码,组件可通过 .NET 平台完全访问设备的本机功能。 Web Vi

.NET快速实现网页数据抓取

前言 今天我们来讲讲如何使用.NET开源(MIT License)的轻量、灵活、高性能、跨平台的分布式网络爬虫框架DotnetSpider来快速实现网页数据抓取功能。 注意:为了自身安全请在国家法律允许范围内开发网页爬虫功能。 网页数据抓取需求 本文我们以抓取博客园10天推荐排行榜第一页的文章标题、

推荐十个优秀的ASP.NET Core第三方中间件,你用过几个?

ASP.NET Core 作为一个强大的、跨平台的、高性能的开源框架,为开发者提供了丰富的功能和灵活的扩展性。其中,中间件(Middleware)是 ASP.NET Core 架构中的核心组件之一,它负责处理 HTTP 请求和响应的管道,允许开发者在请求和响应之间插入自定义逻辑。随着 ASP.NET

【干货分享】.NET人脸识别解决方案

前言 前段时间有同学在DotNetGuide技术社区交流群提问:.NET做人脸识别功能有什么好的解决方案推荐的吗?今天大姚给大家推荐2款.NET开源、免费、跨平台、使用简单的人脸识别库,希望可以帮助到有需要的同学。 人脸识别应用场景 现如今人脸识别应用场景比较广泛如:安防监控、人脸门禁系统、考勤管理

.NET开源免费功能最全的商城项目

前言 今天给大家推荐一个功能丰富、免费、灵活且可定制的开源电子商务解决方案:nopCommerce。大家假如有商城需求可以直接使用该项目进行二次开发,省时省力。 项目介绍 nopCommerce在.NET 7上运行,并使用MS SQL 2012(或更高版本)后端数据库。 nopCommerce是跨平

推荐一款.NET开源的轻量级分布式服务框架

前言 今天要给大家推荐一款由新生命开发团队开源的.NET轻量级分布式服务框架:星尘分布式平台(NewLife.Stardust)。 项目介绍 星尘是一个轻量级分布式服务框架。它的功能包含配置中心、集群管理、远程自动发布、服务治理、服务自动注册和发现、负载均衡、动态伸缩、故障转移、性能监控。 核心功能

[转帖]自动化回归测试工具 —— AREX 上手实践

https://my.oschina.net/arextest/blog/8589156 AREX 是一款开源的自动化测试工具平台,基于 Java Agent 技术与比对技术,通过流量录制回放能力实现快速有效的回归测试。同时提供了接口测试、接口比对测试等丰富的自动化测试功能,无需编程能力也可快速上手

推荐一个好用的.net开发框架

企业应用开发平台(Enterprise Develop Platform),以下简称EDP。EDP是一套集完整组织架构,全面权限体系,以及各类基础功能于一体的基于.net的企业应用开发平台。其最大的特点是将复杂的数据行列权限的实现通过简单且友好的编码方式面向开发人员,同时EDP还提供了全面的系统基础