C# Winfrom chart图 实例练习
代码太多了我就不展示了,贴一些比较有代表性的
成品效果展示:
Excel转Chart示例
简单说一下我的思路
\
先把Excel数据展示在dataGridView控件上
XLIST 为 X轴的数据
XLIST 为 Y轴的数据
ZLIST 为 展示的数据进行数据处理点击展示即可
// 将Excel数据复制到DataTable
DataTable dataTable = new DataTable();private List<string> XList = new List<string>();
private List<double> YList = new List<double>();
private List<double> ZList = new List<double>();series.ChartType = SeriesChartType.Column; // 柱状图
series.ChartType = SeriesChartType.Line; // 折线图 && (趋势图 SORT Y 轴)
series.ChartType = SeriesChartType.Bar; // 横条图
series.ChartType = SeriesChartType.BoxPlot; // 箱线图//切换主窗导致卡顿解决方案private void Form1_Resize(object sender, EventArgs e){//当主窗体变更大小时解决多控件加载卡顿//重置窗口布局//在窗体加载时候 解决闪烁问题//将图像绘制到缓冲区 减少闪烁this.DoubleBuffered = true;//设置本窗体SetStyle(ControlStyles.UserPaint, true);SetStyle(ControlStyles.AllPaintingInWmPaint, true); // 禁止擦除背景.SetStyle(ControlStyles.DoubleBuffer, true); // 双缓冲}//打开文件路径获取Excel数据至dataGridView
string excelFilePath = textBox1.Text;
//使用方式:引用 Microsoft.Office.Interop.Excel 调用Excel读取
//优点:不受Excel版本限制,可指定sheet读取
//缺点:读取速度慢,几千数据10分钟
//ExcelToDataGridView.FillDataGridViewFromExcel(excelFilePath, dataGridView1);
// 方式一 OLEDB读取 数据库引擎
// 优点:读取速度快,依据sheet排序读取
// 缺点:对于Excel版本依赖强,无法读取指定sheet
// 错误提示:本地计算机未指定 Microsoft.ACE.OLEDB.12.0
// 解决方法:win7(64位) + office 2010(64位) 更改目标平台为X86
// win10(64位) + office 2010(64位) 更改目标平台无效,下载安装AccessDatabaseEngine.exeif (String.IsNullOrEmpty(textBox1.Text)){//空不调用}else{dataTable = ReadExcelFile(excelFilePath);}private DataTable ReadExcelFile(string excelFilePath){string connectionString = $"Provider=Microsoft.ACE.OLEDB.12.0;Data Source= {excelFilePath};Extended Properties=\"Excel 12.0 Xml;HDR=YES;\"";using (OleDbConnection conn = new OleDbConnection(connectionString)){conn.Open();OleDbCommand cmd = new OleDbCommand("SELECT * FROM [Sheet1$]", conn);OleDbDataAdapter adapter = new OleDbDataAdapter(cmd);DataTable dataTable = new DataTable();adapter.Fill(dataTable);return dataTable;}}//设定折线图均值
addLateline(chart1, max, "最大值");
addLateline(chart1, roundedAverage, "平均值");
addLateline(chart1, min, "最小值");private void addLateline(Chart chart, double y, string name)
{//chart.ChartAreas[0].AxisX.StripLines.Clear();StripLine stripline = new StripLine();//stripline.Interval = 1; //重复的次数 stripline.IntervalOffset = y; //横线y轴位置stripline.Text = name + ":" + y;stripline.TextOrientation = TextOrientation.Horizontal;stripline.TextAlignment = StringAlignment.Near; // 文本左对齐stripline.StripWidth = 0.15; //线宽度if (name != "平均值"){ stripline.BackColor = System.Drawing.Color.Red; }else{ stripline.BackColor = System.Drawing.Color.Blue; }stripline.BorderDashStyle = ChartDashStyle.Solid; //实线chart.ChartAreas[0].AxisY.StripLines.Add(stripline); //横线//chart.ChartAreas[0].AxisX.StripLines.Add(stripline);//竖线chart.ChartAreas[0].AxisY.MinorGrid.Enabled = true; // 启用Y轴次刻度线chart.ChartAreas[0].AxisY.MajorTickMark.Size = 2; // 设置Y轴主刻度线大小chart.ChartAreas[0].AxisY.MinorTickMark.Size = 1; // 设置Y轴次刻度线大小chart.ChartAreas[0].AxisY.MinorGrid.LineDashStyle = ChartDashStyle.Dot; // 设置Y轴次刻度线的样式chart.ChartAreas[0].AxisY.MinorGrid.LineColor = System.Drawing.Color.LightGray; // 设置Y轴次刻度线的颜色// 开启数据点标签的显示}//开启X轴的左右拖拽
chart1.ChartAreas[0].AxisX.ScaleView.Size = 10; // 设置了 X 轴上显示的数据点的数量
chart1.ChartAreas[0].AxisX.ScaleView.MinSize = 5; // 设置或获取X轴的视图的最小尺寸
chart1.ChartAreas[0].AxisX.ScrollBar.IsPositionedInside = false; // 滚动条位于图表外侧// 折线图获取不同的随机颜色
bool flag = false;
System.Drawing.Color randomColor;while (true)
{randomColor = ColorHelper.GetRandomColor();for (int i = 0; i < YList.Count / XList.Count; i++){if (chart1.Series[i].Color == randomColor){flag = false;break;}else{ flag = true;series.Color = randomColor;break;}}if ( flag == true){break;}
};series.ChartType = SeriesChartType.Line;
System.Drawing.Color seriesColor = GetSeriesColor(chart1, series.Name);//箱线图的计算逻辑//这个就不把代码带出来了 自己算一算就行了//奇数时
//17,19,22,24,25,28,34,35,36,37,38.
//除异常点以外的数据中最小 17
//除异常点以外的数据中最大 38
//中位数 28 // 2 * (当前个数 + 1)/ 4 = 位置
//下四分位数 22 // 1 * (当前个数 + 1)/ 4 = 位置
//上四分位数 36 // 3 * (当前个数 + 1)/ 4 = 位置
//异常点(算的值不在此范围内都算异常值)
//22 - 1.5*(36 - 22 ) = 1;
//36 + 1.5*(36 - 22 ) = 57;//偶数
//12,15,17,19,20,23,25,28,30,33,34,35,36,37
//Q1所在的位置=1(14+1)/4=3.75, 1.25 2.75
//Q2所在的位置=2(14+1)/4=7.5, 2.5
//Q3所在的位置=3(14+1)/4=11.25. 3.75 5.5//下四分位数Q1=0.25×第三项+0.75×第四项=0.25×17+0.75×19=18.5;
//中位数 Q2=0.5×第七项+0.5×第八项=0.5×25+0.5×28=26.5;
//上四分位数Q3=0.75×第十一项+0.25×第十二项=0.75×34+0.25×35=34.25.//18.5 - 1.5*(34.25 - 18.5 ) = 5.125;
//34.25 + 1.5*(34.25 - 18.5) = 57.875;
//string result = "下界+下四分位数+中位数+上四分位数+上界+异常点";
作为新手我解决不了的问题为我转换成3D导致左右拖拽框失效 所以我给注释了如下:
private void radioButton1_Click(object sender, EventArgs e)
{if (rbcheck1)//if (radioButton1.Checked){rbcheck1 = false;radioButton1.Checked = false;// 假设chart是一个Chart控件实例chart1.ChartAreas[0].Area3DStyle.Enable3D = false;chart1.ChartAreas[0].Area3DStyle.Inclination = 30;chart1.ChartAreas[0].Area3DStyle.IsClustered = true;chart1.ChartAreas[0].Area3DStyle.IsRightAngleAxes = false;chart1.ChartAreas[0].Area3DStyle.Perspective = 30;chart1.ChartAreas[0].Area3DStyle.Rotation = 30;chart1.ChartAreas[0].Area3DStyle.WallWidth = 0;//开启X轴的左右拖拽chart1.ChartAreas[0].AxisX.ScaleView.Size = 10; // 设置了 X 轴上显示的数据点的数量chart1.ChartAreas[0].AxisX.ScaleView.MinSize = 5; // 设置或获取X轴的视图的最小尺寸chart1.ChartAreas[0].AxisX.ScrollBar.IsPositionedInside = false; // 滚动条位于图表外侧chart1.ChartAreas[0].InnerPlotPosition.Auto = true;}else{radioButton1.Checked = true;rbcheck1 = true;chart1.ChartAreas.Clear();ChartArea chartArea1 = new ChartArea();设置为3D效果//chartArea1.InnerPlotPosition.Auto = false;chartArea1.Area3DStyle.Enable3D = true; // 启用3D效果chartArea1.Area3DStyle.IsClustered = true; // 设置为集群样式chartArea1.Area3DStyle.Rotation = 20; // 设置旋转角度chartArea1.Area3DStyle.Perspective = 10; // 设置透视角度chartArea1.Area3DStyle.Inclination = 15; // 设置倾斜角度chartArea1.Area3DStyle.LightStyle = LightStyle.Realistic; // 设置光源样式chartArea1.Area3DStyle.WallWidth = 0; // 设置墙宽chartArea1.Area3DStyle.IsRightAngleAxes = false; // 设置是否为右角轴chartArea1.AxisX.ScaleView.Size = 10; // 设置了 X 轴上显示的数据点的数量chartArea1.AxisX.ScaleView.MinSize = 5; // 设置或获取X轴的视图的最小尺寸chartArea1.AxisX.ScrollBar.IsPositionedInside = false; // 滚动条位于图表外侧chart1.ChartAreas.Add(chartArea1);}
}
一:柱状图
二:折线图
三:直方图
四:横条图
五:箱线图
六:趋势图
相关文章:

C# Winfrom chart图 实例练习
代码太多了我就不展示了,贴一些比较有代表性的 成品效果展示: Excel转Chart示例 简单说一下我的思路 \ 先把Excel数据展示在dataGridView控件上 XLIST 为 X轴的数据 XLIST 为 Y轴的数据 ZLIST 为 展示的数据进行数据处理点击展示即可 // 将Excel数…...

iOS从Matter的设备认证证书中获取VID和PID
设备认证证书也叫 DAC, 相当于每个已经认证的设备的标识。包含了 VID 和 PID. VID: Vendor ID ,标识厂商 PID: Product ID, 标识设备的 根据 Matter 对于设备证书的规定,DAC证书subject应该包含VID 和 PID. 可通过解析 X509 证书读取subject…...

带着国标充电器出国怎么办? 适配器模式(Adapter Pattern)
适配器模式(Adapter Pattern) 适配器模式适配器模式(Adapter Pattern)概述talk is cheap, show you my code总结 适配器模式 适配器模式(Adapter Pattern)是面向对象软件设计中的一种结构型设计…...

破解海外业务困局:新加坡服务器托管与跨境组网策略
在当今全球化商业蓬勃发展的浪潮之下,众多企业将目光投向海外市场,力求拓展业务版图、抢占发展先机。而新加坡,凭借其卓越的地理位置、强劲的经济发展态势以及高度国际化的营商环境,已然成为企业海外布局的热门之选。此时…...

Mybatis-Plus快速入门
参考:黑马MyBatisPlus教程全套视频教程,快速精通mybatisplus框架 1.Mapper-plus配置 1.MapperScan("Mapper目录的位置") 2.Mapper层文件需要继承BaseMapper extends BaseMapper<实体类> 3.开启日志 4.配置类 Configuration public cl…...

Chrome被360导航篡改了怎么改回来?
一、Chrome被360导航篡改了怎么改回来? 查看是否被360主页锁定,地址栏输入chrome://version,看命令行end后面(蓝色部分),是否有https://hao.360.com/?srclm&lsn31c42a959f 修改步骤 第一步:…...

Coding(Jenkinsfile)+ Docker 自动化部署 Springboot —— 图文细节和一些注意事项说明
前言:本章讲述一下我使用Coding(Jenkinsfile) Docker部署Springboot项目过程,记录图文细节和一些需要注意的问题。 说明:为什么要使用Coding去集成Docker? 节约了服务器内存,不需要单独部署 Jen…...
docker django uwsgi 报错记录
这个配置中是能够正常进行网页访问的,能够查看网页 [uwsgi] chdir /home/luichun/lc/Pyfile/PyCursor/app module app.wsgi:application plugin-dir /usr/lib/uwsgi/plugins plugins python311 env TZAsia/Shanghai socket-timeout 60 websocket-ma…...

数据分析思维(五):分析方法——假设检验分析方法
数据分析并非只是简单的数据分析工具三板斧——Excel、SQL、Python,更重要的是数据分析思维。没有数据分析思维和业务知识,就算拿到一堆数据,也不知道如何下手。 推荐书本《数据分析思维——分析方法和业务知识》,本文内容就是提取…...
【ES6复习笔记】集合Set(13)
ES6 提供了新的数据结构 Set(集合)。它类似于数组,但成员的值都是唯一的,集合实现了iterator接口,所以可以使用『扩展运算符』和『for…of…』进行遍历。 集合的属性和方法 size:返回集合的元素个数。add…...

基础爬虫案例实战
我们已经学习了多进程、requests、正则表达式的基本用法,但还没有完整地实现过一个爬取案例。这一节,我们就来实现一个完整的网站爬虫,把前面学习的知识点串联起来,同时加深对这些知识点的理解。 准备工作 我们需要先做好如下准备工作。 安…...

深度学习工作:从追求 SoTA 到揭示新现象
TLDR:主要讨论了从追求模型 SoTA 到揭示新现象的转变。通过几个例子,包括ACNet到RepVGG的发展,RIFE插帧、Film插帧,以及OpenAI的近期工作,阐述了这种转变的重要性。 知乎:黄哲威 hzwer链接:http…...

学习记录—正则表达式-基本语法
正则表达式简介-《菜鸟教程》 正则表达式是一种用于匹配和操作文本的强大工具,它是由一系列字符和特殊字符组成的模式,用于描述要匹配的文本模式。 正则表达式可以在文本中查找、替换、提取和验证特定的模式。 本期内容将介绍普通字符,特殊…...

智慧农业物联网传感器:开启农业新时代
在当今科技飞速发展的时代,农业领域正经历着一场前所未有的变革,而智慧农业物联网传感器无疑是这场变革中的关键利器。它宛如农业的 “智慧大脑”,悄然渗透到农业生产的各个环节,为传统农业注入了全新的活力,让农业生产…...

普通人怎么入门学习并使用AI?
前言 作为普通人看着AI一天一天变革,心急如焚,未来但是就是不知道怎么才算真正进入了AI,使用AI....作为从头至尾追随AI脚步的码农有几点小建议~ 一、💻使用 AI 网站或软件,解决实际问题 不管用哪种AI,先用…...
Java中处理if-else的几种高级方法
前言 在我看来多写几个if-else没啥大不了的,但是就是看起来没啥逼格,领导嫌弃。我根据开发的经历写几个不同的替代方法 一、枚举法替代 我先前写了一篇文章,可以去看看。 通过枚举替换if-else语句的解决方案_枚举代替if else c语言-CSDN博…...

前端知识补充—CSS
CSS介绍 什么是CSS CSS(Cascading Style Sheet),层叠样式表, ⽤于控制⻚⾯的样式 CSS 能够对⽹⻚中元素位置的排版进⾏像素级精确控制, 实现美化⻚⾯的效果. 能够做到⻚⾯的样式和结构分离 基本语法规范 选择器 {⼀条/N条声明} 1)选择器决定针对谁修改…...

企业架构学习笔记-数字化转型
1. 企业数字化发展阶段 案例1.业务部门“点菜”,IT部门叫苦 随着企业信息化进程的不断推进,IT部门的角色和面临的挑战也在发生显著变化。在信息化建设的初级阶段,确实存在IT部门需要积极引导和说服业务部门重视信息技术价值的情况。当时&am…...

Linux网络——TCP的运用
系列文章目录 文章目录 系列文章目录一、服务端实现1.1 创建套接字socket1.2 指定网络接口并bind2.3 设置监听状态listen2.4 获取新链接accept2.5 接收数据并处理(服务)2.6 整体代码 二、客户端实现2.1 创建套接字socket2.2 指定网络接口2.3 发起链接con…...
Vue3之状态管理Vuex
Vuex作为Vue.js的官方状态管理库,在大型或复杂的前端项目中扮演着至关重要的角色。本文将从Vuex的原理、特点、应用场景等多个方面进行深入解析,并通过代码示例展示如何在Vuex中实现特定功能。 一、Vuex原理 Vuex是一个专为Vue.js应用程序开发的状态管…...

TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...

自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...

Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...

AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...
CSS | transition 和 transform的用处和区别
省流总结: transform用于变换/变形,transition是动画控制器 transform 用来对元素进行变形,常见的操作如下,它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...