当前位置: 首页 > news >正文

LiveCharts2 初步认识

文章目录

      • 1 LiveCharts2 是什么?
      • 2 LiveCharts2 可以做什么?
      • 3 简单使用LiveCharts2 ,实现动态曲线图

1 LiveCharts2 是什么?

GitHub:https://github.com/beto-rodriguez/LiveCharts2

官网: https://lvcharts.com/

LiveCharts是一个.net的数据可视化库,可以跨多个设备和框架运行,
它在MIT许可证下运行(免费),并提供了一个付费包来提高性能和扩展功能。

1 开发者
是一位长得巨帅的大佬
在这里插入图片描述

2 简介
LiveCharts2 是一个简单、灵活、交互式以及功能强大的跨平台图表库。
在这里插入图片描述
LiveCharts2 现在几乎可以运行在任何平台,支持Maui,Uno Platform、Avalonia、Etoforms、Xamarin、Blazor-wasm、WPF、Winforms、WinUI、UWP等。
在这里插入图片描述

LiveCharts2 是LiveCharts(0)的升级,它修复了前身的主要设计问题,专注于在任何地方运行,在不丢失V0中已有的特性情况下提高了灵活性。
在这里插入图片描述

2 LiveCharts2 可以做什么?

LiveCharts2 提供了折现图、饼图、柱状图、散点图、面积图等多种类型的图表。此外,它还支持多个图表联动显示,支持动态更新数据、自定义样式和动画效果等功能。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3 简单使用LiveCharts2 ,实现动态曲线图

由于工作中使用winform开发比较多,所以下面是在winform中使用LiveCharts的。下面实现的是一个自定义数据类型的动态曲线图。

3.1 LiveCharts包下载
使用Nuget搜索LiveCharts,下载需要的包即可。我下载了这三个包。
在这里插入图片描述
将LiveCharts包拖拽到控件箱,就可以像其它控件那样正常使用了。在这里我使用了CartesianChart 拖放到界面上,如下图所示:
在这里插入图片描述

3.2 后台代码

OscChart 是曲线控件的名称

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;using LiveCharts;
using LiveCharts.Configurations;
using LiveCharts.Wpf;namespace View.PrjForm
{public partial class LiveChartForm : Form{private double _trend;//定时刷新曲线Timer timerChart;public LiveChartForm(){InitializeComponent();#region  多Y轴曲线//将自定义类型MeasureModel映射到曲线坐标点var mapper = Mappers.Xy<MeasureModel>().X(model => model.Time)    //使用 Time.作为X轴的标签.Y(model => model.Value);  //使用Value 作为Y轴的值//全局保存映射器Charting.For<MeasureModel>(mapper);//添加三条曲线OscChart.Series.Add(new LineSeries{Values = new ChartValues<MeasureModel> {new MeasureModel(1,1),new MeasureModel(2,5),new MeasureModel(3,3),new MeasureModel(4,5),new MeasureModel(5,3),},ScalesYAt = 0});OscChart.Series.Add(new LineSeries{Values = new ChartValues<MeasureModel> {new MeasureModel(1,20),new MeasureModel(2,30),new MeasureModel(3,70),new MeasureModel(4,20),new MeasureModel(5,10),},ScalesYAt = 1});OscChart.Series.Add(new LineSeries{Values = new ChartValues<MeasureModel> {new MeasureModel(1,600),new MeasureModel(2,300),new MeasureModel(3,200),new MeasureModel(4,600),new MeasureModel(5,800),},ScalesYAt = 2}); //添加3条Y坐标轴OscChart.AxisY.Add(new Axis{Foreground = System.Windows.Media.Brushes.DodgerBlue,Title = "Blue Axis"});OscChart.AxisY.Add(new Axis{Foreground = System.Windows.Media.Brushes.IndianRed,Title = "Red Axis",Position = AxisPosition.RightTop});OscChart.AxisY.Add(new Axis{Foreground = System.Windows.Media.Brushes.DarkOliveGreen,Title = "Green Axis",Position = AxisPosition.RightTop});OscChart.AxisX.Add(new Axis{DisableAnimations = true,LabelFormatter = value => value.ToString(),Separator = new Separator{Step = 1}}) ;#endregion//定时器刷新timerChart = new Timer(){Interval = 200,};timerChart.Tick += TimerChart_Tick;timerChart.Start();}int time = 5;private void TimerChart_Tick(object sender, EventArgs e){LineStart();}/// <summary>/// 连续折现图的方法/// </summary>private void LineStart(){time++;var r = new Random();_trend = r.Next(-10, 10);//更新纵坐标数据OscChart.Series[0].Values.Add(new MeasureModel(time, _trend));_trend = r.Next(10, 100);OscChart.Series[1].Values.Add(new MeasureModel(time, _trend));_trend = r.Next(100, 1000);OscChart.Series[2].Values.Add(new MeasureModel(time, _trend));if(time > 20){//只关心前面20个数据OscChart.AxisX[0].MaxValue = time; OscChart.AxisX[0].MinValue = time - 20; }}}/// <summary>/// 自定义类型/// </summary>public class MeasureModel{public   MeasureModel(double time, double val){Time = time;Value = val;}public double Time { get; set; }public double Value { get; set; }}
}

3.3 效果图
在运行的时候发现LiveCharts在数据量大的时候,会卡顿,没有那么流畅。
在这里插入图片描述
3.4 过程中遇到的问题
具体问题信息如下:

LiveCharts.Helpers.LiveChartsExceptionHResult=0x80131500Message=LiveCharts does not know how to plot MeasureModel, you can either, use an already configured type or configure this type you are trying to use, For more info see http://lvcharts.net/App/examples/v1/wpf/Types%20and%20ConfigurationSource=LiveCharts

LiveCharts 不知道如何绘制MeasureModel(自定义的数据类型)。
解决方法:使用Mappers映射绑定

           //将自定义类型MeasureModel映射到曲线坐标点var mapper = Mappers.Xy<MeasureModel>().X(model => model.Time)    //使用 Time.作为X轴的标签.Y(model => model.Value);  //使用Value 作为Y轴的值//全局保存映射器Charting.For<MeasureModel>(mapper);

相关文章:

LiveCharts2 初步认识

文章目录 1 LiveCharts2 是什么&#xff1f;2 LiveCharts2 可以做什么&#xff1f;3 简单使用LiveCharts2 &#xff0c;实现动态曲线图 1 LiveCharts2 是什么&#xff1f; GitHub&#xff1a;https://github.com/beto-rodriguez/LiveCharts2 官网&#xff1a; https://lvchar…...

Java设计模式 11-代理模式

代理模式 一、 代理模式(Proxy) 1、代理模式的基本介绍 代理模式&#xff1a;为一个对象提供一个替身&#xff0c;以控制对这个对象的访问。即通过代理对象访问目标对象.这样做的好处是: 可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。被代理的对象…...

Python综合案例-小费数据集的数据分析(详细思路+源码解析)

目录 1. 请导入相应模块并获取数据。导入待处理数据tips.xls&#xff0c;并显示前5行。 2、分析数据 3.增加一列“人均消费” 4查询抽烟男性中人均消费大于5的数据 5.分析小费金额和消费总额的关系&#xff0c;小费金额与消费总额是否存在正相关关系。画图观察。 6分析男女顾…...

软件安全测试

软件安全性测试包括程序、网络、数据库安全性测试。根据系统安全指标不同测试策略也不同。 1.用户程序安全的测试要考虑问题包括&#xff1a; ① 明确区分系统中不同用户权限; ② 系统中会不会出现用户冲突; ③ 系统会不会因用户的权限的改变造成混乱; ④ 用户登陆密码是否…...

Scala模式匹配

Scala中有一个非常强大的模式匹配机制&#xff0c;应用也非常广泛, 例如: 判断固定值 类型查询 快速获取数据 简单模式匹配 一个模式匹配包含了一系列备选项&#xff0c;每个备选项都开始于关键字 case。且每个备选项都包含了一个模式及一到多个表达式。箭头符号 > 隔开…...

银行数仓分层架构

一、为什么要对数仓分层 实现好分层架构&#xff0c;有以下好处&#xff1a; 1清晰数据结构&#xff1a; 每一个数据分层都有对应的作用域&#xff0c;在使用数据的时候能更方便的定位和理解。 2数据血缘追踪&#xff1a; 提供给业务人员或下游系统的数据服务时都是目标数据&…...

Go并发编程的学习代码示例:生产者消费者模型

文章目录 前言代码仓库核心概念main.go&#xff08;有详细注释&#xff09;结果总结参考资料作者的话 前言 Go并发编程学习的简单代码示例&#xff1a;生产者消费者模型。 代码仓库 yezhening/Programming-examples: 编程实例 (github.com)Programming-examples: 编程实例 (g…...

求a的n次幂

文章目录 求a的n次幂程序设计程序分析求a的n次幂 【问题描述】要求利用书上介绍的从左至右二进制幂算法求a的n次幂; 【输入形式】输入两个正整数,一个是a,一个是n,中间用空格分开 【输出形式】输出一个整数 【样例输入】2 10 【样例输出】1024 【样例输入】3 4 【样例输出】…...

word脚标【格式:第X页(共X页)】

不得不吐槽一下这个论文&#xff0c;真的我好头疼啊。我又菜又不想改。但是还是得爬起来改 &#xff08;是谁大半夜不能睡觉加班加点改格式啊&#xff09; 如何插入页码。 格式、要求如下: 操作步骤&#xff1a; ①双击页脚&#xff0c;填好格式&#xff0c;宋体小四和居中都…...

Linux --- 软件安装、项目部署

一、软件安装 1.1、软件安装方式 在Linux系统中&#xff0c;安装软件的方式主要有四种&#xff0c;这四种安装方式的特点如下&#xff1a; 1.2、安装JDK 上述我们介绍了Linux系统软件安装的四种形式&#xff0c;接下来我们就通过第一种(二进制发布包)形式来安装 JDK。 JDK…...

MATLAB应用笔记

其他 1、NaN值 MATLAB判断数据是否为NaN可以直接使用函数&#xff1a;isnan() 三、数据分析 1、相关性 均值、方差、协方差、标准差、相关系数 mean() %均值 nanmean()%去除NAN值求均值 var() %方差 cov() %协方差 std() %标准差 corrcoef(B,b) %R 相关系数plot()…...

ERTEC200P-2 PROFINET设备完全开发手册(6-2)

6.2 诊断与报警实验 首先确认固件为 App1_STANDARD, 将宏定义改为&#xff1a; #define EXAMPL_DEV_CONFIG_VERSION 1 参照第6节的内容&#xff0c;编译和调试固件&#xff0c;并在TIA Portal 中建立RT项目。启动固件后&#xff0c;TIA Portal 切换到在线&#xff0c;可以看…...

算法套路八——二叉树深度优先遍历(前、中、后序遍历)

算法套路八——二叉树深度优先遍历&#xff08;前、中、后序遍历&#xff09; 算法示例&#xff1a;LeetCode98&#xff1a;验证二叉搜索树 给你一个二叉树的根节点 root &#xff0c;判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下&#xff1a; 节点的左子树只…...

视频批量剪辑:如何给视频添加上下黑边并压缩视频容量。

视频太多了&#xff0c;要如何进行给视频添加上下黑边并压缩视频容量&#xff1f;今天就由小编来教教大家要如何进行操作&#xff0c;感兴趣的小伙伴们可以来看看。 首先&#xff0c;我们要进入视频剪辑高手主页面&#xff0c;并在上方板块栏里选择“批量剪辑视频”板块&#…...

那些你需要知道的互联网广告投放知识

作为一个合格的跨境电商卖家&#xff0c;我们除了有好的产品之外&#xff0c;还要知道怎么去营销我们自己的产品。没有好的推广&#xff0c;即使你的产品有多好别人也是很难看得到的。今天龙哥就打算出一期基础的互联网广告投放科普&#xff0c;希望可以帮到各位增加多一点相关…...

【hello Linux】进程程序替换

目录 1. 程序替换的原因 2. 程序替换原理 3. 替换函数 4. 函数解释 5. 命名理解 6.简陋版shell的制作 补充&#xff1a; Linux&#x1f337; 1. 程序替换的原因 进程自创建后只能执行该进程对应的程序代码&#xff0c;那么我们若想让该进程执行另一个“全新的程序”这 便要用…...

【网络应用开发】实验4——会话管理

目录 会话管理预习报告 一、实验目的 二、实验原理 三、实验预习内容 1. 什么是会话&#xff0c;一个会话的生产周期从什么时候&#xff0c;到什么时候结束&#xff1f; 2. 服务器是如何识别管理属于某一个特定客户的会话的&#xff1f; 3. 什么是Cookie&#xff0c;它的…...

Linux服务器怎么分区

Linux服务器怎么分区 我是艾西&#xff0c;linux系统除了从业某个行业经常要用到的程序员比较熟悉&#xff0c;对于小白或只会用Windows系统的小伙伴还是会比较难上手的。今天艾西简单的跟大家聊聊linux系统怎么分区&#xff0c;让身为小白的你也能一眼看懂直接上手操作感受程序…...

传统机器学习(四)聚类算法DBSCAN

传统机器学习(四)聚类算法DBSCAN 1.1 算法概述 DBSCAN&#xff08;Density-Based Spatial Clustering of Applications with Noise&#xff0c;具有噪声的基于密度的聚类方法&#xff09;是一种基于密度的空间聚类算法。 该算法将具有足够密度的区域划分为簇&#xff0c;并在…...

“华为杯”研究生数学建模竞赛2020年-【华为杯】A题:ASIC 芯片上的载波恢复 DSP 算法设计与实现(附获奖论文及matlab代码实现)

目录 摘 要: 1.问题重述 1.1 问题背景 1.2 问题提出 1.3 研究基础 2.模型假设和已知...

水晶排课 13.9.0.5:专注学校教务排课场景,集智能自动排课、灵活课表调整、多维度视图与便捷输出于一体,高效解决排课冲突,适用于中小学各类教务管理需求。

大家好&#xff0c;我是大飞哥。在学校教务管理中&#xff0c;排课是一项繁琐又容易出错的工作 —— 既要兼顾教师课时、班级需求&#xff0c;又要避免冲突&#xff0c;这款水晶排课 13.9.0.5就是专门解决这些问题的工具&#xff0c;它是一款专业高效的教务排课软件&#xff0c…...

Qwen3-VL-8B-Instruct-GGUF模型安全部署最佳实践

Qwen3-VL-8B-Instruct-GGUF模型安全部署最佳实践 1. 引言 在企业环境中部署AI模型时&#xff0c;安全性往往是首要考虑的因素。Qwen3-VL-8B-Instruct-GGUF作为一款强大的多模态视觉语言模型&#xff0c;能够处理图像和文本的复杂任务&#xff0c;但如果部署不当&#xff0c;可…...

手把手教你用丹青识画:让AI为照片配上惊艳的书法描述

手把手教你用丹青识画&#xff1a;让AI为照片配上惊艳的书法描述 1. 前言&#xff1a;当AI遇见传统书法 想象一下&#xff0c;你随手拍下的风景照片&#xff0c;经过AI处理后竟变成了一幅配有优雅书法题跋的艺术作品。这就是「丹青识画」智能影像系统带来的神奇体验。作为一个…...

实战指南:如何用Python绘制强化学习中的Reward曲线(无阴影版)

1. 强化学习Reward曲线的作用与意义 在强化学习训练过程中&#xff0c;Reward曲线就像是我们观察模型学习进度的"晴雨表"。每次训练时&#xff0c;智能体通过与环境互动获得奖励值&#xff0c;这些数据点连起来就形成了Reward曲线。我刚开始接触强化学习时&#xff0…...

SEO_详解SEO优化的基本原理与核心步骤

SEO优化的基本原理 SEO&#xff08;Search Engine Optimization&#xff0c;搜索引擎优化&#xff09;是一门旨在提高网站在搜索引擎结果页面&#xff08;SERP&#xff09;中自然排名的科学与艺术。其目的是通过优化网站内容和结构&#xff0c;使其更符合搜索引擎的算法要求&am…...

春晚具身机器人惊艳亮相,具身智能行业即将迎来黄金时代?高薪岗位火热招聘,这份求职指南你值得拥有!

今年春晚&#xff0c;具身又迎来了高光时刻。不少朋友看完后找我调侃&#xff0c;这几家上春晚的公司估值又要拉升了。其中&#xff0c;宇树的武术表演实在惊叹&#xff0c;双截棍、后空翻&#xff0c;把全球机器人运控能力拉升了一个档次&#xff0c;unitree可以说是断层领先。…...

达摩院智能客服人工智能训练师实战:从模型训练到生产部署的全链路优化

在智能客服系统的开发过程中&#xff0c;我们常常面临一个核心矛盾&#xff1a;业务方希望模型能快速迭代、精准理解用户意图&#xff0c;而技术团队则受困于漫长的训练周期、复杂的多轮对话逻辑以及繁琐的生产部署流程。传统的自建训练环境&#xff0c;从数据清洗、特征工程到…...

Day06 面向对象基础结束→高级开始

面向对象基础this关键字概念&#xff1a;this 代表当前类对象的引用&#xff08;地址&#xff09; 使用 this 区分重名问题&#xff1a;当局部变量和成员变量出现了重名的情况&#xf…...

ezLED库详解:Arduino非阻塞LED控制与状态机设计

1. ezLED库深度解析&#xff1a;面向嵌入式工程师的LED控制实践指南1.1 库定位与工程价值ezLED是一个专为Arduino平台设计的轻量级LED控制库&#xff0c;其核心目标并非替代底层GPIO操作&#xff0c;而是在硬件抽象层之上构建可复用、可配置、可调度的LED行为模型。在实际嵌入式…...

假如我是昇腾总架构师,面对全能电脑会问的10个破局问题与方向指引

假如我是昇腾总架构师&#xff0c;面对全能电脑会问的10个破局问题与方向指引 站在昇腾总架构师视角&#xff0c;围绕芯片、架构、工具链、生态、量产、行业落地等实际痛点&#xff0c;面向全能算力终端提出10个关键问题&#xff0c;并由其给出清晰、可执行的技术方向&#xff…...