美化图表——LiveCharts中的时序图的制作,相对问题的解决

news2024/10/6 6:02:39

美化图表——LiveCharts中的时序图的制作,相应问题的解决

  • 前言
  • 一、效果展示
  • 二、基本的一些实现的代码
    • 1.X,Y坐标的相关设置
    • 2.新增波形对象
    • 3.实时更新数据
  • 三、修改的点
  • 总结


前言

在项目中,需要用到图表来展示波形的实时变化,故找到了这个LiveCharts的美化图标控件库。并按需求对源码进行了部分修改,在此做上记录。我修改的是以前版本的源码,不知道后续作者是否进行了更新。

LiveCharts的下载地址:官网


一、效果展示

我需要的是一个实时的动态更新的时序图的图表,效果展示如下:

在这里插入图片描述

二、基本的一些实现的代码

1.X,Y坐标的相关设置

我在这边,需要将X轴设置成跟随时间进行标识。

先要在窗体中拖入一个CartesianChat控件(引用开源库中的LiveCharts.dll,LiveCharts.WinForms.dll,LiveCharts.Wpf.dll的这三个dll,并导入一下就行在此就不赘述了)

首先定义的一个节点数据的形式
代码如下:

    public class MeasureModel
    {
        public System.DateTime DateTime { get; set; } //记录时间(X轴)
        public double Value { get; set; }			  //记录值(Y轴)
    }

定义XY的数据:

            var mapper = Mappers.Xy<MeasureModel>()
             .X(model => model.DateTime.Ticks)   //use DateTime.Ticks as X
             .Y(model => model.Value);           //use the value property as Y
            Charting.For<MeasureModel>(mapper);

            chart_E84.AxisY.Add(new Axis
            {
                //重新定义Y轴显示的样式
                LabelFormatter = value =>
                {
                    e84CodeHighNum O; //此处我用enum代替的输入的double数据,此处可以根据自己的数据方式去改
                    bool SUCCESS = Enum.TryParse(value.ToString(), out O);
                    return SUCCESS ? O.ToString():"" ;
                }
            });
            chart_E84.AxisX.Add(new Axis
            {
                //关闭X轴渲染
                DisableAnimations = true,
                //重新定义X轴显示样式
                LabelFormatter = value => new System.DateTime((long)value).ToString("mm:ss"),
            });
            
            chart_E84.AxisX[0].MinValue = DateTime.Now.Ticks;//这个是为了跟新X轴的最小值,防止由于0值导致范围过大波形不变化的情况。

2.新增波形对象

当前我需要的是步序图,应该新增StepLineSeries这个,我演示图中有很多条,在此我仅用一个来做演示,其他照着复制就行。代码如下:

        public StepLineSeries A_CS_0;//波形对象
        public ChartValues<MeasureModel> A_CS_0_Values { get; set; } = new ChartValues<MeasureModel>();//节点数据

        private void FrmE84Chart_Load(object sender, EventArgs e)
        {
               chart_E84.Series.Add(A_CS_0 = new StepLineSeries
               {
                   Values = A_CS_0_Values,//绑定实时节点数据。
                   BaseStrokeThickness = 3,//这个是我自己改的开源库中的属性(原因后面讲)。没改过的设置线号用StrokeThickness = 。。。
                   PointGeometry = null//我不想要他的空心圆显示的节点,在此就屏蔽了。
               });
		}

3.实时更新数据

当前我需要它根据时间的推进去实时更新图表,所有需要有一段刷新数据的代码如下:

			//线程
            Thread UpDateChartThread;
            UpDateChartThread = new Thread(new ThreadStart(UpDateCharts));
            UpDateChartThread.IsBackground = true;
            UpDateChartThread.Start();
		//线程函数
        private void UpDateCharts()
        {
            while (true)
            {
                if (timer1.Enabled)
                {
                        //将数据整理并怼进绑定节点数据中
                        ChartValues<MeasureModel> measureModels;
                        measureModels = A_CS_0_Values;
                           
                        //将枚举转换成整型
                        int i = (int)item;
                        if (measureModels.Count != 0 && measureModels.Last().Value == i)
                        {
                             measureModels.RemoveAt(measureModels.Count - 1);//此处当更新节点与上一次一样时,删除后新增
                             												 //为什么要删除?因为源码中会判断节点是否更新,不删除节点只修改时,认为不跟新则图像不会刷新。
                        }
                        else
                        {
                             measureModels.Add(new MeasureModel
                             {
                                DateTime = DateTime.Now,
                                Value = i
                             });
                         }
                         measureModels.Add(new MeasureModel
                         {
                            DateTime = DateTime.Now,
                            Value = i
                         });
                     	 Console.WriteLine(stopWatch.ElapsedMilliseconds);
                     	 chart_E84.Refresh();
                }
                Thread.Sleep(timer_Interval);
            }
		}

三、修改的点

当实现后,发现当悬停在线上时,会有提示(增粗显示),但是由于刷新速度过快,源码中显示用的是+1原理,所有悬停时线会越来越宽,且在鼠标离开时由于-1,宽度也并不能回到原有的宽度。故在源码中做如下更改。
在Series.cs中添加如下属性:

        static  double baseStrokeThickness = 1;
        public double BaseStrokeThickness
        {
            get { 
                return baseStrokeThickness; 
            }
            set
            {
                baseStrokeThickness  = value;
            }
        }


总结

到此就结束了,还有些细节在这篇文章中省略了,比如不要它进行气泡提示以及加粗时,也可以找到相应源码进行修改。希望对有需求的小伙伴们,带来帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/768176.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

优维低代码实践:统计视图

优维低代码技术专栏&#xff0c;是一个全新的、技术为主的专栏&#xff0c;由优维技术委员会成员执笔&#xff0c;基于优维7年低代码技术研发及运维成果&#xff0c;主要介绍低代码相关的技术原理及架构逻辑&#xff0c;目的是给广大运维人提供一个技术交流与学习的平台。 优维…

35.Vue自定义指令-总结

目录 1.自定义指令容易踩的坑 1.1 指令名如果是多个单词&#xff0c;要使用kebab-case命名方式&#xff0c;不要用camelCase命名 1.2 指令回调函数中的this问题 1.3 局部指令与全局指令 2.自定义指令总结 2.1 定义语法&#xff1a; (1).局部指令 (2).全局指令 2.2 配置…

3.14 Bootstrap 缩略图

文章目录 Bootstrap 缩略图添加自定义的内容 Bootstrap 缩略图 本章将讲解 Bootstrap 缩略图。大多数站点都需要在网格中布局图像、视频、文本等。Bootstrap 通过缩略图为此提供了一种简便的方式。使用 Bootstrap 创建缩略图的步骤如下&#xff1a; 在图像周围添加带有 class …

ChatGPT | 修改RetrievalQA推荐答案的数量

知识库经常遇到一个问题会在一个文件的多处或者多个文件出现&#xff0c;这时候如果只回答一个结果就欠佳&#xff0c;最理想的做法是模仿推荐功能&#xff0c;把合适的多个答案及其出处汇总给用户。 如图&#xff0c;一个接口文档里面提到多处“http请求URL”&#xff1a; 使…

vue项目如何部署?有遇到布署服务器后刷新404问题吗?

一、如何部署 前后端分离开发模式下,前后端是独立布署的,前端只需要将最后的构建物上传至目标服务器的web容器指定的静态目录下即可 我们知道vue项目在构建后,是生成一系列的静态文件

Minecraft 1.20.x Forge模组开发 01.Idea开发环境配置

我们本次来进行Minecraft 1.20.x 模组开发环境配置教程的介绍。 效果演示 效果演示 效果演示 1.首先我们需要下载Java17和1.20模组开发包: Java17下载官网

csdn新星计划vue3+ts+antd赛道——利用inscode搭建vue3(ts)+antd前端模板

文章目录 ⭐前言⭐利用inscode免费开放资源&#x1f496; 在inscode搭建vue3tsant项目&#x1f496; 调整配置&#x1f496; antd 国际化配置&#x1f496; 用户store&#x1f496; 路由权限&#x1f496; 预览 ⭐结束 ⭐前言 大家好&#xff0c;我是yma16&#xff0c;本文分享…

【字节流】读数据(一次读一个字节数组数据)

字节流读数据&#xff08;一次读一个字节数组数据&#xff09; 1.需求&#xff1a; 把文件fos.txt中的内容读取出来在控制台输出 2.思路&#xff1a; 创建字节输入流对象调用字节输入流对象的读数据方法释放资源 package com.bytestream; import java.io.FileInputStream; …

TCP/IP网络编程 第十五章:套接字和标准I/O

标准I/O函数的优点 标准I/O函数的两个优点 将标准I/O函数用于数据通信并非难事。但仅掌握函数使用方法并没有太大意义&#xff0c;至少应该 了解这些函数具有的优点。下面列出的是标准I/O函数的两大优点: □标准I/O函数具有良好的移植性(Portability) □标准I/O函数可以利用缓…

stable diffusion windows本地搭建的坑

刚刚2小时前&#xff0c;我搭好了&#xff0c;欣喜若狂&#xff0c;开放端口&#xff0c;同事也尝试了。我的配置 16G内存&#xff0c;AMD卡&#xff0c;有gpu但是没有用。这里不说具体步骤&#xff0c;只说坑点。 首先就是安装gfpgan、clip、openclip问题&#xff0c;我参考…

短视频seo矩阵系统源码开发部署

目录 短视频矩阵源码部署步骤简单易懂&#xff0c;开发者只需按照以下几个步骤进行操作&#xff1a; 代码展示---seo关键词分析 开发要点&#xff1a; 代码展示如下&#xff1a; 开发部署注意事项&#xff1a; 说明&#xff1a;本开发文档适用于短视频seo矩阵系统源码开发…

如何理解 dutu输光定理

解决问题 1 dutu 拿100是赌一次好&#xff0c;还是100次1元的好&#xff1f; 一般的地方&#xff0c;如果不是公平赌局&#xff0c;而期望是负数的话 其实du次数越多越亏 2 1%就基本能决定胜负 了 3 千万不要陷入常人思维&#xff0c;用筹码数量思考&#xff0c;输光为止&am…

Windows与Linux取证分析

目录 一、电子数据取证基本概念 1.电子取证学 2.常规取证 3.洛卡德物质交换原理 4.电子数据范围 5.电子数据取证的概念和目的 6.电子数据取证过程 二、Linux系统取证 1.基本信息获取 &#xff08;1&#xff09;获取系统基础信息 &#xff08;2&#xff09;用户/用户…

centos 安装pyzbar

需求&#xff1a; 运行程序报错 ImportError: Unable to find zbar shared library 进程&#xff1a; 直接使用yum 安装 yum install python-devel && yum install zbar-devel 有时候会能成功&#xff0c;大多数时候python-devel 能成功但是 zbar-devel 会失败 下载…

数据代码分享|R语言基于逐步多元回归模型的天猫商品流行度预测

全文链接&#xff1a;https://tecdat.cn/?p33212 本文通过利用回归模型对天猫商品流行度进行了研究&#xff0c;确定了决定天猫商品流行度的重要因素。并讲述、论证了预测天猫商品流行度是天猫商品交易的至关重要的环节。通过对天猫商品流行度预测技术的发展和探讨&#xff0c…

ModuleNotFoundError: No module named ‘neobolt.packstream._packer‘解决办法

python打包完成后运行报下述错误 在打包得python文件加入以下包&#xff0c;重新打包&#xff0c;问题解决 代码如下&#xff1a; import neobolt.packstream.packer import neobolt.packstream.unpacker import neobolt.bolt.io

PostgreSQL 的就业前景如何?

PostgreSQL的就业前景非常广阔&#xff0c;它是一种功能强大、可靠且开源的关系型数据库管理系统。以下是说明PostgreSQL就业前景的几个关键点&#xff1a; 1.高需求&#xff1a;随着企业和组织对数据存储和管理的需求不断增长&#xff0c;对数据库专业人员的需求也在持续上升…

基于linux下的高并发服务器开发(第二章)- 2.11 匿名管道概述

03 / 匿名管道 04 / 管道的特点 05 / 为什么可以使用管道进行进程间的通信 管道对应一个读端&#xff0c;一个写端。比如说往父进程的文件描述符5 往管道里面写数据&#xff0c;子进程的文件描述符6读出数据。 06 / 管道的数据结构 07 / 匿名管道的使用

win10下解决git报错 Permission denied(publickey)

今天在csdn的GitCode新建了一个项目&#xff0c;然后在windows下git clone时出现错误 gitgitcode.net: Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. 完整…

transforms

batch norm是列标准化&#xff0c;layer norm是行标准化 transforms的encoder&#xff0c;这里省略了一些东西。每一个block都是输入一段向量&#xff0c;然后输出一段向量。每一个block不仅仅是一层layer。每一个block所做的事情&#xff0c;大概是先输出一段向量&#xff0c…