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.exe
 if (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);



    }
}

一:柱状图

二:折线图

三:直方图

四:横条图

五:箱线图

六:趋势图

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

# 起步专用 - 哔哩哔哩全模块超还原设计!(内含接口文档、数据库设计)

↑ 上方下载文档 (大小374KB) 接口文档预览 (超过50个接口) 一、数据库25张表er-关系清晰构图&#xff01;(tip: 鼠标右键图片 > 放大图像) 二、难点/经验 详细说明 热门评论排序评论点赞列表|DTO封装经验分享|精华接口文档说明 组员都说喜欢分档对应枚举码 如果这篇文章…

【Go学习】从一个出core实战问题看Go interface赋值过程

0x01 背景 版本中一个同学找我讨论一个服务出core的问题&#xff0c;最终他靠自己的探索解决了问题&#xff0c;给出了初步的直接原因结论&#xff0c;"Go 中 struct 赋值不是原子的”。间接原因的分析是准确的&#xff0c;直接原因&#xff0c;我有点怀疑。当时写了一些…

leetcode之hot100---54螺旋矩阵(C++)

思路一&#xff1a;模拟 模拟螺旋矩阵的路径&#xff0c;路径超出界限&#xff0c;顺时针旋转&#xff0c;使用一个数组记录当前数字是否被访问到&#xff0c;直到所有的数字全部被访问 class Solution {//一个静态的常量数组&#xff0c;用于标记螺旋矩阵的移动方向(行列变化…

新能源汽车锂离子电池各参数的时间序列关系

Hi&#xff0c;大家好&#xff0c;我是半亩花海。为了进一步开展新能源汽车锂离子电池的相关研究&#xff0c;本文主要汇总并介绍了电动汽车的锂离子电池的各项参数&#xff0c;通过 MATLAB 软件对 Oxford Dataset 的相关数据集进行数据处理与分析&#xff0c;进一步研究各项参…

FastStone 10.x 注册码

简介 FastStone Capture是一款经典好用的屏幕截图软件&#xff0c;在屏幕截图领域具有广泛的应用和众多优势。 软件基本信息 FastStone Capture体积小巧&#xff0c;占用内存少&#xff0c;这使得它在运行时不会给计算机系统带来过多的负担&#xff0c;即使在配置较低的电脑…

AI合成图片是什么意思?有什么用?

随着人工智能的发展&#xff0c;现在市面上出现了很多对企业帮助很大的AI工具&#xff0c;比如说AI合成图片、AI换模特、AI穿衣、AI图片设计等等&#xff0c;下面小编就以AI合成图片为例&#xff0c;为大家详细介绍下。 一、AI合成图片是什么意思? AI合成图片主要就是指利用人…

【示例】Vue AntV G6 base64自定义img 动画效果,自适应宽高屏

需求&#xff1a;拓扑图中需要用动画的线条连接node&#xff0c;在此之前将HTML页面改成了vue页面。需要使用到G6的registerEdge 自定义边&#xff0c;小车的图片需要转成base64格式&#xff08;并翻转&#xff09;&#xff0c;可以通过base64转image查看原来的样子。 另外&am…

MySQL的分析查询语句

【图书推荐】《MySQL 9从入门到性能优化&#xff08;视频教学版&#xff09;》-CSDN博客 《MySQL 9从入门到性能优化&#xff08;视频教学版&#xff09;&#xff08;数据库技术丛书&#xff09;》(王英英)【摘要 书评 试读】- 京东图书 (jd.com) MySQL9数据库技术_夏天又到了…

【递归,搜索与回溯算法 综合练习】深入理解暴搜决策树:递归,搜索与回溯算法综合小专题(二)

优美的排列 题目解析 算法原理 解法 &#xff1a;暴搜 决策树 红色剪枝&#xff1a;用于剪去该节点的值在对应分支中&#xff0c;已经被使用的情况&#xff0c;可以定义一个 check[ ] 紫色剪枝&#xff1a;perm[i] 不能够被 i 整除&#xff0c;i 不能够被 per…

观察者模式(sigslot in C++)

大家&#xff0c;我是东风&#xff0c;今天抽点时间整理一下我很久前关注的一个不错的库&#xff0c;可以支持我们在使用标准C的时候使用信号槽机制进行观察者模式设计&#xff0c;sigslot 官网&#xff1a; http://sigslot.sourceforge.net/ 本文较为详尽探讨了一种观察者模…

GitCode 光引计划投稿|智能制造一体化低代码平台 Skyeye云

随着智能制造行业的快速发展&#xff0c;企业对全面、高效的管理解决方案的需求日益迫切。然而&#xff0c;传统的开发模式往往依赖于特定的硬件平台&#xff0c;且开发过程繁琐、成本高。为了打破这一瓶颈&#xff0c;Skyeye云应运而生&#xff0c;它采用先进的低代码开发模式…

高校就业管理:系统设计与实现的全流程分析

3.1可行性分析 在项目进行开发之前&#xff0c;必须要有可行性分析报告&#xff0c;分别从技术角度&#xff0c;经济角度&#xff0c;操作角度上面进行分析&#xff0c;经过可行性分析是实现科学开发的必要步骤。 3.1.1技术可行性 从技术的角度出发&#xff0c;目前采用开发的技…

超级AI图像放大工具Upscayl:让你的照片细节更清晰,色彩更鲜艳!

前言 Hello大家好&#xff0c;我又来推荐非常好用的AI图片无损放大器,模糊图片秒变高清&#xff0c;Upscayl是一个免费开源的AI图像超分辨率工具。它使用AI模型来通过猜测细节的方式增强图像并提高其分辨率。该工具适用于Linux、macOS和Windows操作系统 安装环境 [名称]&…

1.gitlab 服务器搭建流程

前提条件&#xff1a; 一、服务器硬件水平 搭建gitlab服务器最低配置要求2核4G,低于这个配置的服务器运行效果很差。 gitlab官网&#xff1a;https://about.gitlab.com/ 下载地址&#xff1a;gitlab/gitlab-ce - Packages packages.gitlab.com 本机ubuntu 二、安装依赖 su…

Ai编程从零开始全栈开发一个后台管理系统之用户登录、权限控制、用户管理-前端部分(十二)

云风网 云风笔记 云风知识库 一、创建前端部分 1、vite初始化项目 npm create vitelatest admin-frontend – --template vue-ts 2、安装必要的依赖 npm install vue-router pinia axios element-plus element-plus/icons-vue安装完成后package.json如下&#xff1a; {&qu…

CVE-2024-34351 漏洞复现

CVE-2024-34351&#xff0c;由Next.js异步函数createRedirectRenderResult导致的SSRF。 影响版本&#xff1a;13.4.0< Next.js < 14.1.1 参考文章&#xff1a; Next.js Server-Side Request Forgery in Server Actions CVE-2024-34351 GitHub Advisory Database Gi…

怎么理解GKE Role-Based Access Control (RBAC) 和 Pod Security Policies (PSP)

怎么理解GKE Role-Based Access Control (RBAC) 和 Pod Security Policies (PSP) 理解 Google Kubernetes Engine (GKE) 中的角色基于访问控制&#xff08;RBAC&#xff09;和 Pod 安全策略&#xff08;PSP&#xff09;对于确保集群安全性至关重要。以下是对这两个概念的详细解…

什么是 DevOps 自动化?

DevOps 自动化是一种现代软件开发方法&#xff0c;它使用工具和流程来自动化任务并简化工作流程。它将开发人员、IT 运营和安全团队聚集在一起&#xff0c;帮助他们有效协作并交付可靠的软件。借助 DevOps 自动化&#xff0c;组织能够处理重复性任务、优化流程并更快地将应用程…

帝国CMS:如何去掉帝国CMS登录界面的认证码登录

如果在安装的时候&#xff0c;不小心选中了认证码选项&#xff0c;那么后面登录帝国后台都会要求输入认证码才能登录&#xff0c;如何去除这个设置呢&#xff0c;笔者以古诗词网 www.gushichi.com为例&#xff0c;为大家举例说明&#xff01; 去除步骤如下&#xff1a; 1.前往…

4.2V单节锂电池充电电路(TP4056)、USB与锂电池切换电路分享

一、充电原理图 1、连接说明 BAT_VCC和BAT_GND连接电池 VUSB和GND连接USB电源 2、芯片介绍 a、DW01 DW01芯片是一种电池管理保护芯片&#xff0c;主要用于锂离子电池的保护和管理。DW01芯片具有以下特点&#xff1a; 电池电压保护&#xff1a;DW01芯片可以监测和保护电池的…