.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
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技术交流平台。无论您是初学者还是有丰富经验的开发者,我们都希望能为您提供更多的价值和成长机会。
.NET开源、功能强大、跨平台的图表库 - LiveCharts2的更多相关文章
- 【Dotnet 工具箱】跨平台图表库 LiveCharts2
你好,这里是 Dotnet 工具箱,定期分享 Dotnet 有趣,实用的工具和组件,希望对您有用! LiveCharts2 LiveCharts2 是一个简单.灵活.交互式以及功能强大的跨平台图表库. ...
- 开源的数据可视化JavaScript图表库:ECharts
ECharts (Enterprise Charts 商业产品图表库)是基于HTML5 Canvas的一个纯Javascript图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表.创新的拖拽 ...
- Delphi 跨平台 Socket 通讯库
Delphi 跨平台 Socket 通讯库 免费开源的Delphi 跨平台 Socket 通讯库. 源码URL:https://github.com/winddriver/Delphi-Cross-S ...
- BlazorCharts 原生图表库的建设历程
作者:陈超超 Ant Design Blazor 项目贡献者,拥有十多年从业经验,长期基于.Net技术栈进行架构与开发产品的工作,现就职于正泰集团. 邮箱:timchen@live.com 欢迎各位读 ...
- Android图表库MPAndroidChart(一)——了解他的本质,方能得心应手
Android图表库MPAndroidChart(一)--了解他的本质,方能得心应手 我们项目中经常会遇到一些统计图,比如折线图,线形图等,在一些运动健康类的App中尤其的常见,这画起来要命,我以前就 ...
- 基于canvas实现的高性能、跨平台的股票图表库--clchart
什么是 ClChart? ClChart是一个基于canvas创建的简单.高性能和跨平台的股票数据可视化开源项目.支持PC.webApp以及React Native和Weex等平台.在React Na ...
- 强大的金融类图表库 TradingView 使用分享
这段时间刚好做币圈交易所,运用到了现在最火的金融类图表库 -- TradingView ,就是强大,基本上现在的火币网(https://www.huobi.com),币安网(https://www.b ...
- 我的Android进阶之旅------>【强力推荐】Android开源图表库XCL-Charts版本发布及展示页
因为要做图表相关的应用,后来百度发现了一个很好的Android开源图表库(XCL-Charts is a free charting library for Android platform.) 下面 ...
- Android开源图表库XCL-Charts版本号公布及展示页
XCL-Charts V2.1 Android开源图表库(XCL-Charts is a free charting library for Android platform.) XCL-Charts ...
- highCharts入门-强大的图表库插件
简介 Highcharts 是一个用纯JavaScript编写的一个图表库, 能够很简单便捷的在web网站或是web应用程序添加有交互性的图表,并且免费提供给个人学习.个人网站和非商业 ...
随机推荐
- 【Oracle】手动安装和卸载Oracle,这是最全的一篇了!!
写在前面 之前写过一篇在CentOS 7/8上安装Oracle的文章,按照我写的文章安装成功了,但是卸载Oracle时出现了问题.今天,我就整理一篇手动安装和卸载Oracle的文章吧.全文为实战型内容 ...
- EventSource JS实时通信
前台 html <script type="text/javascript"> if (typeof (EventSource) != "undefined& ...
- multisim的支路及总线设计
Multisim的支路及总线设计 1.实验原理 最近在使用multisim设计时,用到了总线和支路设计,这里记录一下,方便以后查阅相关操作.其中主要是总线的使用和支路连接器的使用. 2.实验操作 (1 ...
- KingbaseES V8R6 创建索引create index concurrently被阻塞
前言 CREATE INDEX CONCURRENTLY(CIC)是DBA们最常用的语句之一,它的好处是不阻塞DML语句. 但在大事务.长事务较多的系统,它可能被阻塞得很久. 本篇就从这个阻塞的案例开 ...
- KingbaesES数据库查看阻止vacuum的常用语句
KingbaesES数据库中遇到表膨胀,有时碰到vacuum失效的场景.最常见的原因如下. 以下测试基于有关analyze和autovacuum的默认阈值触发条件. 1.autovacuum是否运行, ...
- ET介绍——更为便捷高效的AI框架-行为机(Behavior Machine)
什么是行为机 顾名思义,类比状态机每个节点是一个状态,行为机每个节点是描述一种行为.行为机每个节点之间是互斥的,并且节点相互之间完全不用关心是怎么切换的.这里就不讲状态机跟行为树是怎么做ai的了,这里 ...
- Jetty的ssl模块
启用ssl模块,执行如下命令: java -jar $JETTY_HOME/start.jar --add-modules=ssl 命令的输出,如下: INFO : ssl initialized i ...
- JDK9的新特性:JVM的xlog
目录 简介 xlog的使用 selections output decorators 总结 简介 在java程序中,我们通过日志来定位和发现项目中可能出现的问题.在现代java项目中,我们使用log4 ...
- JDK10的新特性:var和匿名类
目录 简介 匿名类中自定义变量 lambda表达式中的匿名类 总结 简介 匿名类相信大家都用过了,学过JDK8中的lambda表达式之后,可以发现有些匿名类是可以用lambda表达式来替代的,能够被替 ...
- reactive stream协议详解
目录 背景 什么是reactive stream 深入了解java版本的reactive stream Publisher Subscriber Subscription Processor JDK中 ...