winform LiveCharts2的使用--图表的使用
介绍
对于图标,需要使用到livechart2中的CartesianChart
控件,是一个“即用型”控件,用于使用笛卡尔坐标系创建绘图。需要将Series属性分配一组ICartesianSeries。
例如下面代码,创建一个最简单的图表:
cartesianChart1.Series = new ISeries[]
{new LineSeries<int>{Values = new int[] { 4, 6, 5, 3, -3, -1, 2 }},new ColumnSeries<double>{Values = new double[] { 2, 5, 4, -2, 4, -3, 5 }}
};
代码中new LineSeries<int>表示图上的曲线图,new ColumnSeries<double>表示图上的柱状图。通过对Values赋值,来构建每一个点。也有StepLineSeries,表示步线图:
一个图标由四部分组成,分别是Series(图形)、Axes(坐标轴)、Tooltip(提示信息)、Legend(图例),分别对应图上内容:
Series介绍
LineSeries
private LineSeries<ObservableValue> m_lineSeries { get; set; }
public ISeries[] Series { get; set; }private void cartesianChart1_Load(object sender, EventArgs e)
{m_lineSeries = new LineSeries<ObservableValue>(){Name = "直通率(%)",Values = new ObservableCollection<ObservableValue>(),DataLabelsPosition = LiveChartsCore.Measure.DataLabelsPosition.Top, // 数值显示位置DataLabelsPaint = new SolidColorPaint(new SKColor(45, 45, 45)), // 设置显示在图形中的数值颜色LineSmoothness = 1, // 设置曲线的平滑性, 0--1,由直到弯曲Fill = new SolidColorPaint(new SKColor(20, 200, 200, 128)), // 设置图形填充,折线的下部分进行填充};List<int> ints = new List<int>() { 1, 3, 2, 5, 6 };m_lineSeries.Values = ints.Select(value=>new ObservableValue(value)).ToList();Series = [m_lineSeries];cartesianChart1.Series = Series;
}
List<int> ints = new List<int>() { 1, 3, 2, 5, 6 };
m_lineSeries.Values = ints.Select(value=>new ObservableValue(value)).ToList();
此处用于设置在图中描绘的点,表示的是Y轴对应的值
Series = [m_lineSeries];
cartesianChart1.Series = Series;
将series在图上绘制
属性:
Name | 图例名称 | |
Values | 图形对应的点值 | |
DataLabelsPosition | 数值在图形中显示的位置 | 默认Top; DataLabelsPosition = LiveChartsCore.Measure.DataLabelsPosition.Top |
DataLabelsPaint | 数值显示的颜色 | DataLabelsPaint = new SolidColorPaint(new SKColor(45, 45, 45)) |
DataLabelsFormatter | 数值在图像上格式化显示 | DataLabelsFormatter = value => (value.Coordinate.PrimaryValue / 100).ToString("P"), 以百分比形式显示 |
LineSmoothness | 设置曲线的平滑性 | 0--1,由直到弯曲 |
Fill | 设置图形填充,图形下部分进行填充颜色 | Fill = new SolidColorPaint(new SKColor(20, 200, 200, 128)) null不填充 |
ScalesYAt | 数值对应哪一个Y轴显示(如果有多个Y轴) | |
Stroke | 显示图形的边框属性 | |
IsHoverable | 鼠标悬停在图形点时,是否显示详细信息 | 默认true |
DataLabelsFormatter:
"N"
:数字格式(带千位分隔符)。
-
- 示例:
1234.567.ToString("N2")
→"1,234.57"
- 示例:
"F"
:定点数格式。
-
- 示例:
1234.567.ToString("F2")
→"1234.57"
- 示例:
"C"
:货币格式。
-
- 示例:
1234.567.ToString("C2")
→"$1,234.57"
(取决于区域设置)
- 示例:
"P"
:百分比格式。
-
- 示例:
0.567.ToString("P2")
→"56.70%"
- 示例:
"E"
:科学计数法格式。
-
- 示例:
1234.567.ToString("E2")
→"1.23E+003"
- 示例:
"d"
:短日期格式。
-
- 示例:
DateTime.Now.ToString("d")
→"10/15/2023"
- 示例:
"D"
:长日期格式。
-
- 示例:
DateTime.Now.ToString("D")
→"Sunday, October 15, 2023"
- 示例:
"t"
:短时间格式。
-
- 示例:
DateTime.Now.ToString("t")
→"10:30 AM"
- 示例:
"T"
:长时间格式。
-
- 示例:
DateTime.Now.ToString("T")
→"10:30:45 AM"
- 示例:
"yyyy-MM-dd"
:自定义日期格式。
-
- 示例:
DateTime.Now.ToString("yyyy-MM-dd")
→"2023-10-15"
- 示例:
"0.00"
:强制显示两位小数。
-
- 示例:
1234.5.ToString("0.00")
→"1234.50"
- 示例:
"#,###"
:添加千位分隔符。
-
- 示例:
1234567.ToString("#,###")
→"1,234,567"
- 示例:
"0.##%"
:自定义百分比格式。
-
- 示例:
0.567.ToString("0.##%")
→"56.7%"
- 示例:
Stroke = new SolidColorPaint(new SKColor(0, 0, 0)){StrokeThickness = 2 }
new SKColor(0, 0, 0)
设置边框的颜色
StrokeThickness
设置绘制边框的粗细值
ColumnSeries
ColumnSeries
用于绘制柱状图,适合展示离散数据的对比。每个柱子代表一个数据点,柱子的高度由数据点的值决定。可以同时显示多个 ColumnSeries
,用于比较不同类别的数据。
private ColumnSeries<ObservableValue> m_onepass_columnSeries { get; set; }
private void cartesianChart1_Load(object sender, EventArgs e)
{m_onepass_columnSeries = new ColumnSeries<ObservableValue>(){Name = "一次PASS",Values = new ObservableCollection<ObservableValue>(),ScalesYAt = 0,DataLabelsPosition = LiveChartsCore.Measure.DataLabelsPosition.Top, // 数值显示位置DataLabelsPaint = new SolidColorPaint(new SKColor(45, 45, 45)), // 设置显示在图形中的数值颜色IgnoresBarPosition = true,MaxBarWidth = 20,Stroke = null,};List<int> ints = new List<int>() { 1, 3, 2, 5, 6 };m_onepass_columnSeries.Values = ints.Select(value=>new ObservableValue(value)).ToList();Series = [m_onepass_columnSeries];cartesianChart1.Series = Series;
}
属性(有相同属性,不进行介绍):
Rx 和 Ry | 设置柱子的圆角半径 | Rx = 5;Ry = 5; |
MaxBarWidth | 设置柱子的最大宽度 | MaxBarWidth = 20 |
IgnoresBarPosition | 忽略位置显示,当有多个柱状图时,可以重叠显示 | 默认false |
StepLineSeries
阶梯线图 通过水平线和垂直线连接数据点,形成阶梯状的折线。每个数据点的值决定了阶梯的高度。适合展示离散数据的变化,尤其是数据点之间的变化是突变的场景。
private StepLineSeries<ObservableValue> m_time_stepline { get; set; }
private void cartesianChart1_Load(object sender, EventArgs e)
{m_time_stepline = new StepLineSeries<ObservableValue>(){Name = "time",Values = new ObservableCollection<ObservableValue>(),ScalesYAt = 0,};List<int> ints = new List<int>() { 1, 3, 2, 5, 6 };m_time_stepline.Values = ints.Select(value=>new ObservableValue(value)).ToList();Series = [m_time_stepline];cartesianChart1.Series = Series;
}
属性(有相同属性,不进行介绍):
GeometryFill | 数据点的填充颜色 | GeometryFill = new SolidColorPaint(SKColors.Red); |
GeometryStroke | 数据点的描边颜色 | GeometryStroke = new SolidColorPaint(SKColors.Black); |
GeometrySize | 数据点的大小 | GeometrySize = 10; |
Axes介绍
Axes(坐标轴)用于定义数据的显示范围和刻度。可以配置为 X 轴、Y 轴,甚至是多轴(例如多个 Y 轴)。每个轴可以独立配置其外观、刻度、标签等属性。
// 定义X轴
cartesianChart1.XAxes = [new Axis{TicksPaint = new SolidColorPaint(new SKColor(35, 35, 35)), // 刻度线颜色TicksAtCenter = true, // 是否位于中间MinStep = 1,SeparatorsPaint = new SolidColorPaint(new SKColor(200, 200, 200)),CrosshairLabelsBackground = SKColors.DarkOrange.AsLvcColor(),CrosshairLabelsPaint = new SolidColorPaint(SKColors.DarkRed),CrosshairPaint = new SolidColorPaint(SKColors.DarkOrange, 1),Labeler = value => value.ToString("N3")}];
// 定义Y轴 这里定义了两个
cartesianChart1.YAxes = [new Axis{TicksPaint = new SolidColorPaint(new SKColor(35, 35, 35)), // 刻度线颜色TicksAtCenter = true, // 是否位于中间Position = LiveChartsCore.Measure.AxisPosition.Start,MinLimit = 0,},new Axis{Position = LiveChartsCore.Measure.AxisPosition.End,Labeler = (value) => (value/100).ToString("P"),MinLimit = 0, // 最小范围}
];
XAxes 用于定义X轴属性
YAxes 用于定义Y轴属性
属性:
MinLimit MaxLimit | 坐标轴的最小值和最大值。 | |
MinStep | 刻度的最小步长 | |
TicksPaint | 刻度线的颜色 | TicksPaint = new SolidColorPaint(SKColors.Black) |
TicksAtCenter | 刻度线是否位于坐标轴的中心 | 默认true |
SeparatorsPaint | 分隔线的颜色 | SeparatorsPaint = new SolidColorPaint(SKColors.Gray) |
ShowSeparatorLines | 是否显示分隔线 | 默认true |
LabelsPaint | 刻度标签的文字颜色 | LabelsPaint = new SolidColorPaint(SKColors.Black) |
LabelsRotation | 刻度标签的旋转角度 | LabelsRotation = 45 旋转45° |
Labeler | 自定义刻度标签的显示内容 | Labeler = value => value.ToString("N2"); N2:显示两位小数 |
CrosshairLabelsBackground | 十字准线标签的背景颜色 | CrosshairLabelsBackground = SKColors.DarkOrange.AsLvcColor() |
CrosshairLabelsPaint | 十字准线标签的文字颜色 | CrosshairLabelsPaint = new SolidColorPaint(SKColors.DarkRed) |
CrosshairPaint | 十字准线的颜色和宽度 | CrosshairPaint = new SolidColorPaint(SKColors.DarkOrange, 1) |
NamePaint | 坐标轴标题的文字颜色 | |
Position | 坐标轴的位置 | Position = LiveChartsCore.Measure.AxisPosition.Start start:左侧或下侧 end:右侧或上侧 |
cartesianChart
可以设置的属性:
ZoomMode | 设置沿哪个轴可以拖动 | |
LegendPosition | Legend显示的位置 | |
LegendTextSize | Legend文本的大小 | |
Title | 图表的标题 |
cartesianChart1.Title = new LabelVisual
{Text = "chart",TextSize = 20,BackgroundColor = new LvcColor(20, 200, 200)
};
cartesianChart1.ZoomMode = LiveChartsCore.Measure.ZoomAndPanMode.X; // 可以沿X轴拖动
cartesianChart1.LegendPosition = LiveChartsCore.Measure.LegendPosition.Bottom; // 显示位置
cartesianChart1.LegendTextSize = 18; // 文本大小
cartesianChart1.Dock = DockStyle.Fill; // 布局
中文乱码
如果在使用的过程中出现中文乱码,可以试试在Main中加入这行代码:
LiveCharts.Configure(config => config.HasGlobalSKTypeface(SKFontManager.Default.MatchCharacter('汉')));
相关文章:

winform LiveCharts2的使用--图表的使用
介绍 对于图标,需要使用到livechart2中的CartesianChart 控件,是一个“即用型”控件,用于使用笛卡尔坐标系创建绘图。需要将Series属性分配一组ICartesianSeries。 例如下面代码,创建一个最简单的图表: cartesianCha…...

【计算机网络】IPv6和NAT网络地址转换
IPv6 IPv6协议使用由单/双冒号分隔一组数字和字母,例如2001:0db8:85a3:0000:0000:8a2e:0370:7334,分成8段。IPv6 使用 128 位互联网地址,有 2 128 2^{128} 2128个IP地址无状态地址自动配置,主机可以通过接口标识和网络前缀生成全…...

flutter简单自定义跟随手指滑动的横向指示器
ScrollController _scrollController ScrollController();double _scrollIndicatorWidth 60.w;//指示器的长度double _maxScrollPaddingValue 30.w;//指示器中蓝条可移动的最大距离double _scrollPaddingValue 0.0;//指示器中蓝条左边距(蓝条移动距离)overridevoid initSta…...
项目日记 -Qt音乐播放器 -搜索模块
最近期末,时间较少,详细内容之后再补充。 搜索 用得最多的一个 格式:https://music.163.com/api/search/get/web?s搜索词&type1&limit66&offset0 s 后跟搜索词 type 后跟类型,1表歌手 limit 限制每次最多返回多少…...
JavaScript 性能优化实战研讨
核心优化方向 执行效率:减少主线程阻塞内存管理:避免泄漏和过度消耗加载性能:加快解析与执行速度渲染优化:减少布局重排与重绘 🔥 关键优化策略与代码示例 1️⃣ 减少重排(Reflow)与重绘(Repaint) // 避免逐行修改样…...

有机黑鸡蛋与普通鸡蛋:差异剖析与选购指南
在我们的日常饮食结构里,鸡蛋始终占据着不可或缺的位置,是人们获取营养的重要来源。如今,市场上鸡蛋种类丰富,除了常见的普通鸡蛋,有机黑鸡蛋也逐渐崭露头角,其价格通常略高于普通鸡蛋。这两者究竟存在哪些…...

CTFHub-RCE 命令注入-无过滤
观察源代码 判断是Windows还是Linux 源代码中有 ping -c 4 说明是Linux 查看有哪些文件 127.0.0.1|ls 发现除了index.php文件外,还存在一个可疑的文件 打开flag文件 我们尝试打开这个文件 127.0.0.1|cat 19492844826916.php 可是发现 文本内容显示不出来&…...
spring IOC控制反转
控制反转,将对象的创建进行反转,常规情况下,对象都是开发者手动创建的,使用 loC 开发者不再需要创建对象,而是由IOC容器根据需求自动创建项目所需要的对象 不用IOC,所有对象IOC开发者自己创建使用IOC&…...
hot100 -- 1.哈希系列
1.两数之和 题目: 给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串 的长度。 题解: 方法1:暴力求解 def get_two_sum(nums, target):for i in range(len(nums)):for j in range(i1, len(nums)):if nums[i] nums[j…...

leetcode hot100刷题日记——31.二叉树的直径
二叉树直径详解 题目描述对直径的理解解答:dfs小TIPS 题目描述 对直径的理解 实际上,二叉树的任意一条路径均可以被看作由某个节点为起点,从其左儿子和右儿子向下遍历的路径拼接得到。 那我们找二叉树的直径(最大路径)…...

行为型:解释器模式
目录 1、核心思想 2、实现方式 2.1 模式结构 2.2 实现案例 3、优缺点分析 4、适用场景 5、注意事项 1、核心思想 目的:针对某种语言并基于其语法特征创建一系列的表达式类(包括终极表达式与非终极表达式),利用树结构模式…...
逻辑回归详解:从原理到实践
在机器学习的广阔领域中,逻辑回归(Logistic Regression)虽名为 “回归”,实则是一种用于解决二分类(0 或 1)问题的有监督学习算法。它凭借简单易懂的原理、高效的计算性能以及出色的解释性,在数…...
FastAPI集成APsecheduler的BackgroundScheduler+mongodb(精简)
项目架构: FastAPI(folder) >app(folder) >core(folder) >models(folder) >routers(folder) >utils(folder) main.py(file) 1 utils文件夹下新建schedulers.py from apscheduler.schedulers.background import BackgroundScheduler from apschedu…...
本地部署FreeGPT+内网穿透公网远程访问,搞定ChatGPT外网访问难题
FreeGPT是一个基于GPT 3.5/4的ChatGPT聊天网页用户界面,提供了一个开放的聊天界面,开箱即用。ChatGPT是非常热门的,但访问体验一直不太理想。为了解决这一问题,出现了各类方法和工具,其中FreeGPT是一款非常实用的…...

linux 1.0.3
挂载 这个虚拟机啥时候都能挂起 会有一个这个东东 选择连接虚拟机,然后就连到linux了 这有两个键,一个是和主机连接一个是和虚拟机连接 先把U盘拔掉 原本是没有这个盘的,但是插上去之后,电脑创建了一个虚拟的盘 也就是图中的F…...
基于RK3588的智慧农场系统开发|RS485总线|华为云IOT|node-red|MQTT
一、硬件连接流程 本次采用的是 总线型拓扑:所有设备并联到两根 RS485 总线上(A 和 B-) 二、通信协议配置 1. 主从通信模式 RS485 是半双工:同一时间只能有一个设备发送数据主从架构:通常一个主设备(…...
解锁程序人生学习成长密码,从目标设定开始
解锁程序人生学习成长密码,从目标设定开始 关键词:程序员成长、目标设定、学习路径、技能提升、职业规划、刻意练习、反馈机制 摘要:本文深入探讨程序员如何通过科学的目标设定方法实现职业成长。文章从目标设定的重要性出发,详细介绍了SMART原则、OKR方法等技术,并结合程…...
简单cnn
数据增强 在图像数据预处理环节,为提升数据多样性,可采用数据增强(数据增广)策略。该策略通常不改变单次训练的样本总数,而是通过对现有图像进行多样化变换,使每次训练输入的样本呈现更丰富的形态差异&…...

C#集合循环删除某些行
你想要在遍历集合(例如List)的同时删除某些元素时,直接在循环中删除元素可能会导致问题,因为这可能会改变集合的大小和导致索引问题; 可以用for循环的倒序来删除; 如果要删除满足特定条件的所有元素&…...
相机定屏问题分析四:【cameraserver 最大request buffer超标】后置视频模式预览定屏闪退至桌面
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:相机定屏问题分析三:【配流ConfigStream失败】外屏打开相机视频照片人像来回切换后,相机页面卡死,点击没反应9055522 这一篇我们开始讲: 相机定屏问题分析四:【cameraserver 最大request buffer超…...

【Linux 学习计划】-- 进程地址空间
目录 进程地址的引入 进程地址空间基础原理 区域划分的本质 如何理解进程地址空间 越界访问的本质 进一步理解写时拷贝 重谈 fork 返回值 结语 进程地址的引入 我们先来看一段代码: 首先我们可以看到,父进程和子进程是可以同时可以看到一个变量…...
告别重复 - Ansible 配置管理入门与核心价值
告别重复 - Ansible 配置管理入门与核心价值 还记得我们在 SRE 基础系列中反复强调的“减少琐事 (Toil)”和“拥抱自动化”吗?想象一下这些场景: 你需要部署一个新的 Web 服务集群,每台服务器都需要安装 Nginx、配置防火墙规则、同步 Web 内容、启动服务……手动操作不仅耗时…...
3D Gaussian splatting 04: 代码阅读-提取相机位姿和稀疏点云
目录 3D Gaussian splatting 01: 环境搭建3D Gaussian splatting 02: 快速评估3D Gaussian splatting 03: 用户数据训练和结果查看3D Gaussian splatting 04: 代码阅读-提取相机位姿和稀疏点云3D Gaussian splatting 05: 代码阅读-训练整体流程3D Gaussian splatting 06: 代码…...

CTFHub-RCE 命令注入-过滤空格
观察源代码 代码里面可以发现过滤了空格 判断是Windows还是Linux 源代码中有 ping -c 4 说明是Linux 查看有哪些文件 127.0.0.1|ls 打开flag文件 我们尝试将空格转义打开这个文件 利用 ${IFS} 127.0.0.1|cat${IFS}flag_195671031713417.php 可是发现 文本内容显示不出来&…...
卫生间改造翻新怎么选产品?我在瑞尔特找到了解决方案
在一场打掉重来的卫生间翻新改造中,最令人头疼的,从来都不是瓷砖、吊顶这类“看得见”的工序,而是那些每天都在用、但选错一次就要懊悔好多年的卫浴产品。从功能到体验,从老人适配到美学搭配,这事真不是买个贵的就够了…...
C++ list数据删除、list数据访问、list反转链表、list数据排序
list数据删除,代码见下 #include<iostream> #include<list>using namespace std;void printList(const list<int>& l) {for (list<int>::const_iterator it l.begin(); it ! l.end(); it) {cout << *it << " "…...

Express教程【002】:Express监听GET和POST请求
文章目录 2、监听post和get请求2.1 监听GET请求2.2 监听POST请求 2、监听post和get请求 创建02-app.js文件。 2.1 监听GET请求 1️⃣通过app.get()方法,可以监听客户端的GET请求,具体的语法格式如下: // 1、导入express const express req…...
mysql安装教程--笔记
一、Windows 系统安装 方法1:使用 MySQL Installer(推荐) 1. 下载安装包 访问 MySQL 官网下载页面,选择 MySQL Installer for Windows。 2. 运行安装程序 双击下载的 .msi 文件,选择安装类型: ◦ Developer…...
C++ 观察者模式:设计与实现详解
一、引言 在现代软件开发中,组件间的交互与通信是系统设计的核心挑战之一。观察者模式(Observer Pattern)作为一种行为设计模式,提供了一种优雅的解决方案,用于实现对象间的一对多依赖关系。本文将深入探讨 C++ 中观察者模式的设计理念、实现方式及其应用场景。 二、观察…...

【PostgreSQL 03】PostGIS空间数据深度实战:从地图服务到智慧城市
PostGIS空间数据深度实战:从地图服务到智慧城市 关键词 PostGIS, 空间数据库, 地理信息系统, GIS, 空间查询, 地理分析, 位置服务, 智慧城市, 空间索引, 坐标系统 摘要 PostGIS是PostgreSQL的空间数据扩展,它将普通的关系数据库转变为强大的地理信息系统…...