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

【WinForm UI控件系列】散点图/折线图控件 (支持数值型、时间型、字符串型)

前言c# winform UI控件系列Net6纯GDI绘图无依赖虽然做不到最好争取做好更好用一、效果图 x轴三种类型数值、时间、字符串支持五种颜色风格。标题位置支持左中右布局x轴标题、y轴标题支持旋转角度。图例支持位置定义选择合适位置是否显示连线是否显示网格线是否圆滑曲线二、使用说明ScatterPlot 散点图/折线图控件控件简介ScatterPlot 是一个功能强大的散点图和折线图控件参考 ScottPlot 设计支持平滑曲线、多种X轴类型数值型、字符串型、日期时间型、网格线、值提示和图例显示。主要特性多种X轴类型支持 Numeric数值、Category字符串类别、DateTime日期时间平滑曲线支持 Smooth 平滑曲线显示可调整张力网格线支持 X/Y 轴网格线显示控制值提示鼠标悬停显示数据点值支持自动格式化图例位置控制支持 7 种图例位置None, TopLeft, TopCenter, TopRight, BottomLeft, BottomCenter, BottomRight轴标签旋转支持 X/Y 轴标签旋转角度设置自动日期时间格式根据时间跨度自动选择最优显示格式属性变更通知实现 INotifyPropertyChanged属性值改变立即生效基本使用简单散点图// 创建散点图控件varscatterPlotnewScatterPlot{DockDockStyle.Fill,ColorTypeColorType.Primary};// 添加数据系列varseriesnewScatterSeries{Name系列1,ShowLinetrue,ShowMarkerstrue,Smoothtrue};// 添加数据点for(inti0;i10;i){series.Points.Add(newScatterPoint(i,Math.Sin(i*0.5)*1020));}scatterPlot.Series.Add(series);scatterPlot.RefreshPlot();this.Controls.Add(scatterPlot);X轴类型设置// 数值型默认scatterPlot.XAxisTypeXAxisType.Numeric;// 字符串类别型scatterPlot.XAxisTypeXAxisType.Category;// 日期时间型scatterPlot.XAxisTypeXAxisType.DateTime;日期时间型数据当使用XAxisType.DateTime时控件会自动根据时间跨度选择合适的显示格式时间跨度X轴显示格式Tooltip格式≤24小时HH:mmHH:mm≤72小时MM-dd HH:mmMM-dd HH:mm≤30天MM-ddMM-dd≤1年yyyy-MMyyyy-MM1年yyyy-MM-ddyyyy-MM-dd// 日期时间型示例24小时内数据scatterPlot.XAxisTypeXAxisType.DateTime;scatterPlot.Title24小时温度变化;scatterPlot.XAxisLabel时间;varseriesnewScatterSeries{Name今日温度,ShowLinetrue,ShowMarkerstrue};// 添加24小时内的数据点DateTimetodayDateTime.Now.Date;series.Add(today.AddHours(0),18);series.Add(today.AddHours(6),20);series.Add(today.AddHours(12),28);series.Add(today.AddHours(18),24);series.Add(today.AddHours(24),19);scatterPlot.AddSeries(series);scatterPlot.RefreshPlot();图例位置控制scatterPlot.ShowLegendtrue;scatterPlot.LegendPositionLegendPosition.TopRight;// 右上角scatterPlot.LegendOrientationLegendOrientation.Horizontal;// 水平排列轴标签旋转// X轴标签旋转 45 度scatterPlot.AxisLabelStyle.XAxisRotation45;// Y轴标签旋转 -90 度scatterPlot.AxisLabelStyle.YAxisRotation-90;网格线控制// 显示 X 轴网格线scatterPlot.GridLineStyle.ShowXtrue;// 显示 Y 轴网格线scatterPlot.GridLineStyle.ShowYtrue;// 设置网格线颜色scatterPlot.GridLineStyle.ColorColor.FromArgb(230,230,230);属性说明主要属性属性名类型默认值说明SeriesList-数据系列集合XAxisTypeXAxisTypeNumericX轴类型ColorTypeColorTypePrimary色彩类型Titlestring“”图表标题XAxisLabelstring“”X轴标题YAxisLabelstring“”Y轴标题图例属性属性名类型默认值说明ShowLegendbooltrue是否显示图例LegendPositionLegendPositionBottomCenter图例位置LegendOrientationLegendOrientationHorizontal图例排列方向轴标签样式属性名类型默认值说明AxisLabelStyle.XAxisRotationint0X轴标签旋转角度AxisLabelStyle.YAxisRotationint0Y轴标签旋转角度AxisLabelStyle.FontSizefloat9标签字体大小AxisLabelStyle.ColorColorGray标签颜色网格线样式属性名类型默认值说明GridLineStyle.ShowXbooltrue是否显示X轴网格线GridLineStyle.ShowYbooltrue是否显示Y轴网格线GridLineStyle.ColorColorLightGray网格线颜色GridLineStyle.Widthint1网格线宽度事件PointClicked数据点点击事件可用于显示详细信息scatterPlot.PointClicked(sender,args){stringxValue;if(scatterPlot.XAxisTypeXAxisType.DateTime){xValuenewDateTime((long)args.Point.X).ToString(MM-dd HH:mm);}else{xValueargs.Point.X.ToString();}MessageBox.Show($系列:{args.Series.Name}\nX:{xValue}\nY:{args.Point.Y:F2});};完整示例24小时温度变化varscatterPlotnewScatterPlot{DockDockStyle.Fill,Title24小时温度变化,XAxisLabel时间,YAxisLabel温度 (°C),XAxisTypeXAxisType.DateTime,ShowLegendtrue,LegendPositionLegendPosition.BottomCenter};// 今日温度vartodaySeriesnewScatterSeries{Name今日温度,LegendText今日,ShowLinetrue,ShowMarkerstrue,Smoothtrue,SmoothTension0.4f,LineWidth2};DateTimetodayDateTime.Now.Date;todaySeries.Add(today.AddHours(0),18);todaySeries.Add(today.AddHours(2),17);todaySeries.Add(today.AddHours(4),16);todaySeries.Add(today.AddHours(6),17);todaySeries.Add(today.AddHours(8),20);todaySeries.Add(today.AddHours(10),24);todaySeries.Add(today.AddHours(12),28);todaySeries.Add(today.AddHours(14),30);todaySeries.Add(today.AddHours(16),29);todaySeries.Add(today.AddHours(18),26);todaySeries.Add(today.AddHours(20),23);todaySeries.Add(today.AddHours(22),20);todaySeries.Add(today.AddHours(24),19);scatterPlot.AddSeries(todaySeries);scatterPlot.RefreshPlot();this.Controls.Add(scatterPlot);多日期温度对比varscatterPlotnewScatterPlot{DockDockStyle.Fill,Title温度趋势图,XAxisLabel日期,YAxisLabel温度 (°C),XAxisTypeXAxisType.DateTime,ShowLegendtrue,LegendPositionLegendPosition.TopRight};// 本周温度varseries1newScatterSeries{Name本周温度,LegendText本周,ShowLinetrue,ShowMarkerstrue,Smoothtrue,LineWidth2};// 添加7天数据for(inti-6;i0;i){series1.Add(DateTime.Now.AddDays(i).Date,20Math.Sin(i*0.5)*5);}scatterPlot.AddSeries(series1);scatterPlot.RefreshPlot();注意事项日期时间数据使用DateTime.ToOADate()或DateTime.Ticks转换为数值存储刷新图表修改数据后调用RefreshPlot()重新绘制平滑曲线设置Smooth true并可通过SmoothTension调整平滑度0-1之间图例绘制图例始终在最上层显示不会被网格线遮挡轴标题设置XAxisLabel或YAxisLabel会自动预留空间避免与轴标签重叠三、后记陆续补充完善中敬请关注如有需求有好的建议请留言(xue5zhijing)

相关文章:

【WinForm UI控件系列】散点图/折线图控件 (支持数值型、时间型、字符串型)

前言:c# winform UI控件系列(Net6),纯GDI绘图无依赖,虽然做不到最好,争取做好更好用!一、效果图 (x轴三种类型:数值、时间、字符串)支持五种颜色风格。标题&a…...

MCP 2026细粒度权限配置最后窗口期:Gartner认证工程师亲授——3类业务系统(SaaS/混合云/边缘IoT)差异化配置矩阵

更多请点击: https://intelliparadigm.com 第一章:MCP 2026细粒度权限控制配置全景认知 MCP 2026(Multi-Cloud Policy Engine v2026)引入了基于属性的动态权限模型(ABACRBAC Hybrid),支持资源级…...

VSCode 2026远程同步漏洞预警(CVE-2026-XXXXX):未打补丁将导致增量同步静默失效——附热修复脚本

更多请点击: https://intelliparadigm.com 第一章:VSCode 2026远程同步漏洞预警(CVE-2026-XXXXX)概述 CVE-2026-XXXXX 是一个高危远程代码执行漏洞,影响 VSCode 1.86–1.92 版本中内置的 Remote Sync(远程…...

长提示词优化5大技巧,让AI大模型更稳定可控

随着Sora、Gen-3、Midjourney V6等AI大模型的飞速发展,我们对AI生成内容的需求和期待已发生质的飞跃。从最初简单的“生成一张符合要求的图片”,升级为“创作一段有逻辑、有分镜、有质感的完整剧情”。随之而来的是Prompt的不断拉长。 长提示词带来的副…...

【数据分析】基于二维多面体模板匹配2D-PTM方法分析原子分辨率电子显微镜图像matlab代码

🔥 内容介绍原子分辨率电子显微镜 (Atomic Resolution Transmission Electron Microscopy, AR-TEM) 技术能够提供材料在原子尺度上的结构信息,为材料科学、纳米科技等领域的研究提供了强有力的手段。然而,从AR-TEM图像中提取准确的原子结构信…...

EspoCRM完整安装指南:5步快速部署免费开源客户关系管理系统

EspoCRM完整安装指南:5步快速部署免费开源客户关系管理系统 【免费下载链接】espocrm EspoCRM – Open Source CRM Application 项目地址: https://gitcode.com/GitHub_Trending/es/espocrm 想要免费、开源的客户关系管理解决方案吗?EspoCRM正是您…...

如何用curatedMetagenomicData快速分析人类微生物组数据:完整指南

如何用curatedMetagenomicData快速分析人类微生物组数据:完整指南 【免费下载链接】curatedMetagenomicData Curated Metagenomic Data of the Human Microbiome 项目地址: https://gitcode.com/gh_mirrors/cu/curatedMetagenomicData 你是否曾经面对海量的微…...

【路径规划】基于融合改进A星-麻雀搜索算法求解六边形栅格地图路径规划

​✅作者简介:热爱数据处理、数学建模、仿真设计、论文复现、算法创新的Matlab仿真开发者。🍎更多Matlab代码及仿真咨询内容点击主页 🔗:Matlab科研工作室🍊个人信条:格物致知,期刊达人。&#…...

WinUtil终极指南:5分钟掌握Windows系统一键优化与批量安装

WinUtil终极指南:5分钟掌握Windows系统一键优化与批量安装 【免费下载链接】winutil Chris Titus Techs Windows Utility - Install Programs, Tweaks, Fixes, and Updates 项目地址: https://gitcode.com/GitHub_Trending/wi/winutil 还在为Windows系统卡顿…...

OMC - 09 oh-my-claudecode 的多 Agent 编排实战

文章目录Pre一、问题背景:为什么需要“团队流水线编排”二、总体架构:两条运行时、一个调度内核2.1 双运行时:V1 Watchdog 与 V2 Event-Driven2.2 上层抽象:Skill 层与统一接口三、分阶段流水线:从“先干活”到“先规划…...

CAD导入ansys失败解决方案

笔者亲试,文件中的方案走一遍可以解决大部分此类问题1.炸开图块:选中所有图形,输入 EXPLODE(快捷键 X)并回车。建议连续执行 2-3 次,确保所有嵌套的块和面域都被彻底打散为基础线条。2.清理重叠&#xff1a…...

重新定义地图创作:如何通过TEdit实现泰拉瑞亚世界的无限可能

重新定义地图创作:如何通过TEdit实现泰拉瑞亚世界的无限可能 【免费下载链接】Terraria-Map-Editor TEdit - Terraria Map Editor - TEdit is a stand alone, open source map editor for Terraria. It lets you edit maps just like (almost) paint! It also lets …...

SMAPI安卓安装器:如何让星露谷物语在手机上玩出PC版MOD体验?

SMAPI安卓安装器:如何让星露谷物语在手机上玩出PC版MOD体验? 【免费下载链接】SMAPI-Android-Installer SMAPI Installer for Android 项目地址: https://gitcode.com/gh_mirrors/smapi/SMAPI-Android-Installer 你是否曾经羡慕PC玩家能在星露谷物…...

AI证书备考时间别低估:很多人准备时间完全不够

在AI技术快速普及、职场竞争日益激烈的当下,AI证书已成为很多人提升自身价值的重要选择。其中,CAIE注册人工智能工程师认证作为聚焦人工智能领域的主流技能等级认证,受到了零基础小白、职场赋能者及专业技术人士的关注。但一个常见的误区是&a…...

告别钢网!手把手教你用热风枪和普通焊锡丝搞定QFN芯片焊接(附温度曲线详解)

极简工具下的QFN芯片焊接实战:热风枪与焊锡丝的完美配合 在电子制作和维修领域,QFN封装芯片因其体积小、性能优而广受欢迎,但它的焊接过程却让不少爱好者望而却步。专业回流焊设备和定制钢网固然理想,但当你手头只有一把热风枪、普…...

IBM P570小机更换电源步骤

在HMC里查看报错:本次HMC里有一个电源相关报错,但是没有具体的sn号和位置码,查看电源后面的状态灯,不是两个常亮状态,而是一个不亮,一个闪烁,判断故障损坏,位置:----2z7t…...

实战复盘:一次内网渗透中,如何利用旧版向日葵客户端获取远程控制权限

内网渗透实战:旧版向日葵客户端的远程控制漏洞分析与防御 当你在一次内网渗透测试中发现多台主机仍在使用旧版向日葵远程控制软件时,这可能是一条通往域控的捷径。去年的一次红队行动中,我们正是通过一台边缘服务器的SunloginClient 10.3.0.2…...

二叉树先序线索化及先序线索二叉树找后继

#include <stdio.h> #include <stdlib.h>// 线索二叉树结点 typedef struct ThreadNode {int data;struct ThreadNode *lchild, *rchild;int ltag, rtag; } ThreadNode, *ThreadTree;ThreadNode *pre NULL;void create(ThreadTree &T) {T (ThreadNode *)mal…...

GetQzonehistory:一键永久备份QQ空间说说的完整解决方案

GetQzonehistory&#xff1a;一键永久备份QQ空间说说的完整解决方案 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否担心QQ空间中那些记录着青春点滴的说说会随着时间流逝而消失&…...

阶跃 StepAudio 2.5 ASR 上线!500TPS 极速推理,30分钟语音“秒级转写”

语音 Agent 首字响应慢&#xff0c;很多人以为是 LLM 的锅。其实真正的延时瓶颈常在 ASR&#xff08;自动语音识别&#xff09;&#xff1a;传统的逐 token 串行输出——一段 5 分钟音频&#xff0c;要等几十秒才能拿到完整转写结果&#xff0c;整条链路卡在这一步。 StepAudi…...

别再用记事本了!手把手教你用Python+010 Editor高效解决CTF中的编码乱序问题(以GKCTF签到题为例)

告别记事本&#xff1a;Python与010 Editor打造CTF编码乱序处理流水线 在CTF竞赛中&#xff0c;编码转换和乱序处理类题目往往消耗大量时间在重复性操作上。传统做法是手动复制粘贴到各种在线解码工具&#xff0c;不仅效率低下&#xff0c;还容易在多次转换中丢失关键数据。这次…...

选嵌入式培训,到底在选什么?

一文看懂核心底层逻辑当下嵌入式技术飞速迭代&#xff0c;新能源、汽车电子、具身智能等热门赛道持续爆发&#xff0c;专业嵌入式工程师需求激增。不少入行、转行、进阶者选择培训作为捷径&#xff0c;但市面上机构五花八门&#xff0c;同质化、纸上谈兵等问题突出&#xff0c;…...

sfy recommand

sfy...

高级前端需要学习那些东西?

一、JavaScript 深度&#xff08;这是分水岭&#xff09;高级前端必须对 JS 有“语言级理解”&#xff0c;而不是 API 使用者。必须掌握执行机制事件循环&#xff08;Event Loop&#xff1a;宏任务 / 微任务&#xff09;调用栈 / 执行上下文作用域 & 闭包this 绑定规则&…...

上网行为监控软件哪个好?推荐六款优秀的上网行为监控软件,快码住

在企业管理中&#xff0c;如何平衡员工的上网自由与办公效率&#xff0c;始终是管理者面临的一大挑战。王先生是一家外贸公司的负责人&#xff0c;他最近发现公司的出口业务增长缓慢&#xff0c;但每月的网络带宽费用却居高不下。经过排查&#xff0c;他才意识到部分员工利用公…...

6引脚数码管驱动全解析:从引脚复用、位扫描原理到C代码实战(附避坑指南)

6引脚数码管驱动全解析&#xff1a;从引脚复用、位扫描原理到C代码实战&#xff08;附避坑指南&#xff09; 数码管作为嵌入式系统中最经典的人机交互元件之一&#xff0c;其驱动原理看似简单却暗藏玄机。当遇到6引脚控制二十多个LED的特殊数码管时&#xff0c;传统的共阴/共阳…...

学习笔记 - SCI/时钟与脉冲机制

1.核心基础概念1.1频率&#xff08;Frequency&#xff0c;Hz&#xff09;每秒发生多少次周期性变化1 Hz 1 次 / 秒 1 MHz 100万 次 / 秒本质描述“变化速度”1.2周期&#xff08;Period&#xff0c;T&#xff09;一次完整变化所需时间T 1/f常见换算频率周期1 MHz1 μs8 MHz0…...

一文读懂分享网站模块介绍(附实操教程)

很多商家做小程序商城&#xff0c;最头疼的就是分享网站模块介绍的设置。一、为什么需要这个功能&#xff1f;很多做得好的小程序商城&#xff0c;都把分享网站模块介绍用到了极致。二、适用场景以下场景特别适合使用分享网站模块介绍&#xff1a;• 日常商城运营&#xff1a;通…...

Ryujinx终极指南:如何在PC上免费畅玩Switch游戏 [特殊字符]

Ryujinx终极指南&#xff1a;如何在PC上免费畅玩Switch游戏 &#x1f3ae; 【免费下载链接】Ryujinx 用 C# 编写的实验性 Nintendo Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/ry/Ryujinx Ryujinx是一款采用C#语言开发的开源Nintendo Switch模拟器&a…...

工业Modbus调试神器:5分钟掌握OpenModScan,告别通讯故障烦恼

工业Modbus调试神器&#xff1a;5分钟掌握OpenModScan&#xff0c;告别通讯故障烦恼 【免费下载链接】OpenModScan Open ModScan is a Free Modbus Master (Client) Utility 项目地址: https://gitcode.com/gh_mirrors/op/OpenModScan 你是否曾为工业设备通讯调试而彻夜…...