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

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图 实例练习

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

iOS从Matter的设备认证证书中获取VID和PID

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

带着国标充电器出国怎么办? 适配器模式(Adapter Pattern)

适配器模式&#xff08;Adapter Pattern&#xff09; 适配器模式适配器模式&#xff08;Adapter Pattern&#xff09;概述talk is cheap&#xff0c; show you my code总结 适配器模式 适配器模式&#xff08;Adapter Pattern&#xff09;是面向对象软件设计中的一种结构型设计…...

破解海外业务困局:新加坡服务器托管与跨境组网策略

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

Mybatis-Plus快速入门

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

Chrome被360导航篡改了怎么改回来?

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

Coding(Jenkinsfile)+ Docker 自动化部署 Springboot —— 图文细节和一些注意事项说明

前言&#xff1a;本章讲述一下我使用Coding&#xff08;Jenkinsfile&#xff09; Docker部署Springboot项目过程&#xff0c;记录图文细节和一些需要注意的问题。 说明&#xff1a;为什么要使用Coding去集成Docker&#xff1f; 节约了服务器内存&#xff0c;不需要单独部署 Jen…...

docker django uwsgi 报错记录

这个配置中是能够正常进行网页访问的&#xff0c;能够查看网页 [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&#xff0c;更重要的是数据分析思维。没有数据分析思维和业务知识&#xff0c;就算拿到一堆数据&#xff0c;也不知道如何下手。 推荐书本《数据分析思维——分析方法和业务知识》&#xff0c;本文内容就是提取…...

【ES6复习笔记】集合Set(13)

ES6 提供了新的数据结构 Set&#xff08;集合&#xff09;。它类似于数组&#xff0c;但成员的值都是唯一的&#xff0c;集合实现了iterator接口&#xff0c;所以可以使用『扩展运算符』和『for…of…』进行遍历。 集合的属性和方法 size&#xff1a;返回集合的元素个数。add…...

基础爬虫案例实战

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

深度学习工作:从追求 SoTA 到揭示新现象

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

学习记录—正则表达式-基本语法

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

智慧农业物联网传感器:开启农业新时代

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

普通人怎么入门学习并使用AI?

前言 作为普通人看着AI一天一天变革&#xff0c;心急如焚&#xff0c;未来但是就是不知道怎么才算真正进入了AI&#xff0c;使用AI....作为从头至尾追随AI脚步的码农有几点小建议~ 一、&#x1f4bb;使用 AI 网站或软件&#xff0c;解决实际问题 不管用哪种AI&#xff0c;先用…...

Java中处理if-else的几种高级方法

前言 在我看来多写几个if-else没啥大不了的&#xff0c;但是就是看起来没啥逼格&#xff0c;领导嫌弃。我根据开发的经历写几个不同的替代方法 一、枚举法替代 我先前写了一篇文章&#xff0c;可以去看看。 通过枚举替换if-else语句的解决方案_枚举代替if else c语言-CSDN博…...

前端知识补充—CSS

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

企业架构学习笔记-数字化转型

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

Linux网络——TCP的运用

系列文章目录 文章目录 系列文章目录一、服务端实现1.1 创建套接字socket1.2 指定网络接口并bind2.3 设置监听状态listen2.4 获取新链接accept2.5 接收数据并处理&#xff08;服务&#xff09;2.6 整体代码 二、客户端实现2.1 创建套接字socket2.2 指定网络接口2.3 发起链接con…...

Vue3之状态管理Vuex

Vuex作为Vue.js的官方状态管理库&#xff0c;在大型或复杂的前端项目中扮演着至关重要的角色。本文将从Vuex的原理、特点、应用场景等多个方面进行深入解析&#xff0c;并通过代码示例展示如何在Vuex中实现特定功能。 一、Vuex原理 Vuex是一个专为Vue.js应用程序开发的状态管…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

【2025年】解决Burpsuite抓不到https包的问题

环境&#xff1a;windows11 burpsuite:2025.5 在抓取https网站时&#xff0c;burpsuite抓取不到https数据包&#xff0c;只显示&#xff1a; 解决该问题只需如下三个步骤&#xff1a; 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

10-Oracle 23 ai Vector Search 概述和参数

一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI&#xff0c;使用客户端或是内部自己搭建集成大模型的终端&#xff0c;加速与大型语言模型&#xff08;LLM&#xff09;的结合&#xff0c;同时使用检索增强生成&#xff08;Retrieval Augmented Generation &#…...

MySQL 8.0 事务全面讲解

以下是一个结合两次回答的 MySQL 8.0 事务全面讲解&#xff0c;涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容&#xff0c;并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念&#xff08;ACID&#xff09; 事务是…...

脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)

一、OpenBCI_GUI 项目概述 &#xff08;一&#xff09;项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台&#xff0c;其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言&#xff0c;首次接触 OpenBCI 设备时&#xff0c;往…...

Python 训练营打卡 Day 47

注意力热力图可视化 在day 46代码的基础上&#xff0c;对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...

Unity中的transform.up

2025年6月8日&#xff0c;周日下午 在Unity中&#xff0c;transform.up是Transform组件的一个属性&#xff0c;表示游戏对象在世界空间中的“上”方向&#xff08;Y轴正方向&#xff09;&#xff0c;且会随对象旋转动态变化。以下是关键点解析&#xff1a; 基本定义 transfor…...

【FTP】ftp文件传输会丢包吗?批量几百个文件传输,有一些文件没有传输完整,如何解决?

FTP&#xff08;File Transfer Protocol&#xff09;本身是一个基于 TCP 的协议&#xff0c;理论上不会丢包。但 FTP 文件传输过程中仍可能出现文件不完整、丢失或损坏的情况&#xff0c;主要原因包括&#xff1a; ✅ 一、FTP传输可能“丢包”或文件不完整的原因 原因描述网络…...