C#多曲线数据分析
数据如下

统计效果图如下

程序初始化
private void Form1_Load(object sender, EventArgs e)
{
using (SqlConnection con = new SqlConnection("server=.;pwd=123456;uid=sa;database=db_TomeOne"))
{
SqlDataAdapter da = new SqlDataAdapter("select Years from tb_curve", con);
DataTable dt = new DataTable();
da.Fill(dt);
this.comboBox1.DataSource = dt.DefaultView;
this.comboBox1.DisplayMember = "Years";
this.comboBox1.ValueMember = "Years";
}
}
按钮点击
private void button1_Click(object sender, EventArgs e)
{
this.CreateImage(Convert.ToInt32(this.comboBox1.Text));
}
private void CreateImage(int ID)
{
int height = 440, width = 600; //设置画布宽和高
System.Drawing.Bitmap image = new System.Drawing.Bitmap(width, height);//创建画布
Graphics g = Graphics.FromImage(image); //创建Graphics对象
try
{
g.Clear(Color.White); //清空图片背景色
Font font = new System.Drawing.Font("Arial", 9, FontStyle.Regular); //设置字体
Font font1 = new System.Drawing.Font("宋体", 12, FontStyle.Regular); //设置字体
Font font2 = new System.Drawing.Font("Arial", 8, FontStyle.Regular); //设置字体
System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.Blue, 1.2f, true); //创建LinearGradientBrush对象
g.FillRectangle(Brushes.AliceBlue, 0, 0, width, height); //绘制矩形框
Brush brush1 = new SolidBrush(Color.Blue); //创建笔刷
Brush brush2 = new SolidBrush(Color.SaddleBrown); //创建笔刷
string str = "SELECT * FROM tb_curve WHERE Years=" + ID + ""; //声明SQL语句
SqlConnection Con = new SqlConnection("server=.;pwd=123456;uid=sa;database=db_TomeOne");//建立数据库连接
Con.Open(); //打开数据库连接
SqlCommand Com = new SqlCommand(str, Con); //创建SqlCommand对象
SqlDataReader dr = Com.ExecuteReader(); //创建SqlDataReader对象
dr.Read(); //开始读取记录
if (dr.HasRows) //如果有记录
{
//绘制标题
g.DrawString("" + ID + "年公司内部人员统计表", font1, brush1, new PointF(160, 30));
}
dr.Close(); //关闭SqlDataReader对象
//画图片的边框线
g.DrawRectangle(new Pen(Color.Blue), 0, 0, image.Width - 1, image.Height - 1);
Pen mypen = new Pen(brush, 1); //创建画笔
Pen mypen2 = new Pen(Color.Red, 2); //创建画笔
int x = 60;
for (int i = 0; i < 12; i++)
{
g.DrawLine(mypen, x, 80, x, 340); //绘制纵向线条
x = x + 40;
}
Pen mypen1 = new Pen(Color.Blue, 2); //创建画笔
g.DrawLine(mypen1, x - 480, 80, x - 480, 340); //绘制线条
int y = 106;
for (int i = 0; i < 9; i++)
{
g.DrawLine(mypen, 60, y, 540, y); //绘制横向线条
y = y + 26;
}
g.DrawLine(mypen1, 60, y, 540, y);
//x轴
String[] n = {" 一月", " 二月", " 三月", " 四月", " 五月", " 六月", " 七月",
" 八月", " 九月", " 十月", "十一月", "十二月"}; //绘制月份
x = 35;
for (int i = 0; i < 12; i++)
{
g.DrawString(n[i].ToString(), font, Brushes.Red, x, 348); //设置文字内容及输出位置
x = x + 40;
}
//y轴
String[] m = {"900人", " 800人", " 700人", "600人", " 500人", " 400人", " 300人", " 200人",
" 100人"}; //绘制人数
y = 100;
for (int i = 0; i < 9; i++)
{
g.DrawString(m[i].ToString(), font, Brushes.Red, 10, y); //设置文字内容及输出位置
y = y + 26;
}
int[] Count1 = new int[12];
int[] Count2 = new int[12];
string[] NumChr = new string[12];
string cmdtxt2 = "SELECT * FROM tb_curve WHERE Years=" + ID + ""; //声明SQL语句
SqlCommand Com1 = new SqlCommand(cmdtxt2, Con); //创建SqlCommand对象
SqlDataAdapter da = new SqlDataAdapter(); //创建SqlDataAdapter对象
da.SelectCommand = Com1;
DataSet ds = new DataSet(); //创建DataSet对象
da.Fill(ds); //Fill方法填充DataSet
int j = 0;
for (int i = 0; i < 12; i++)
{
NumChr[i] = ds.Tables[0].Rows[0][i + 1].ToString();
}
for (j = 0; j < 12; j++)
{
Count1[j] = Convert.ToInt32(NumChr[j].Split('|')[0].ToString()) * 26 / 100;
}
for (int k = 0; k < 12; k++)
{
Count2[k] = Convert.ToInt32(NumChr[k].Split('|')[1].ToString()) * 26 / 100;
}
//显示折线效果
SolidBrush mybrush = new SolidBrush(Color.Red); //创建SolidBrush对象
Point[] points1 = new Point[12];
points1[0].X = 60; points1[0].Y = 340 - Count1[0];
points1[1].X = 100; points1[1].Y = 340 - Count1[1];
points1[2].X = 140; points1[2].Y = 340 - Count1[2];
points1[3].X = 180; points1[3].Y = 340 - Count1[3];
points1[4].X = 220; points1[4].Y = 340 - Count1[4];
points1[5].X = 260; points1[5].Y = 340 - Count1[5];
points1[6].X = 300; points1[6].Y = 340 - Count1[6];
points1[7].X = 340; points1[7].Y = 340 - Count1[7];
points1[8].X = 380; points1[8].Y = 340 - Count1[8];
points1[9].X = 420; points1[9].Y = 340 - Count1[9];
points1[10].X = 460; points1[10].Y = 340 - Count1[10];
points1[11].X = 500; points1[11].Y = 340 - Count1[11];
g.DrawLines(mypen2, points1); //绘制折线
Pen mypen3 = new Pen(Color.Black, 2); //创建画笔
Point[] points2 = new Point[12];
points2[0].X = 60; points2[0].Y = 340 - Count2[0];
points2[1].X = 100; points2[1].Y = 340 - Count2[1];
points2[2].X = 140; points2[2].Y = 340 - Count2[2];
points2[3].X = 180; points2[3].Y = 340 - Count2[3];
points2[4].X = 220; points2[4].Y = 340 - Count2[4];
points2[5].X = 260; points2[5].Y = 340 - Count2[5];
points2[6].X = 300; points2[6].Y = 340 - Count2[6];
points2[7].X = 340; points2[7].Y = 340 - Count2[7];
points2[8].X = 380; points2[8].Y = 340 - Count2[8];
points2[9].X = 420; points2[9].Y = 340 - Count2[9];
points2[10].X = 460; points2[10].Y = 340 - Count2[10];
points2[11].X = 500; points2[11].Y = 340 - Count2[11];
g.DrawLines(mypen3, points2); //绘制折线
//绘制标识
g.DrawRectangle(new Pen(Brushes.Red), 150, 370, 250, 50); //绘制范围框
g.FillRectangle(Brushes.Red, 250, 380, 20, 10); //绘制小矩形
g.DrawString("试用员工人数", font2, Brushes.Red, 270, 380); //绘制试用员工人数
g.FillRectangle(Brushes.Black, 250, 400, 20, 10); //绘制小矩形
g.DrawString("正式员工人数", font2, Brushes.Black, 270, 400); //绘制正式员工人数
this.panel1.BackgroundImage = image; //显示绘制的图像
}
catch
{ }
}
C#多曲线数据分析的更多相关文章
- R数据分析:临床预测模型中校准曲线和DCA曲线的意义与做法
之前给大家写过一个临床预测模型:R数据分析:跟随top期刊手把手教你做一个临床预测模型,里面其实都是比较基础的模型判别能力discrimination的一些指标,那么今天就再进一步,给大家分享一些和临 ...
- 脑成像数据分析:Python工具包
来源:SealHuang 脑成像技术已经成为认知科学和心理学研究领域中一种重要的研究手段,帮助研究者不断深入发掘我们脑中的秘密.伴随着研究的不断深入,各式各样的指标参数和分析方法也不断推陈出新,以迅雷 ...
- 基于SPSS的美国老年夏季运动会运动员数据分析
本文是课程训练的报告,部分图片由于格式原因并没有贴出,有兴趣者阅读完整报告者输入以下链接 http://files.cnblogs.com/files/liugl7/基于SPSS的老 ...
- 小白学数据分析----->DNU/DAU
行业指标观察分析-DNU/DAU 写在分析之前 一直以来,我们对于数据都是在做加法,也希望这个过程中,不断搜罗和变换出来更多的数据指标,维度等等.而在实际的分析中,我们发现,一如我们给用户提供产品一样 ...
- Gartner: Hype Cycle for Emerging Technologies-2012 (技术成熟度曲线) [转]
英文稿: The “Hype Cycle for Emerging Technologies” report is the longest-running annual Hype Cycle, p ...
- 六行python代码的爱心曲线
前些日子在做绩效体系的时候,遇到了一件囧事,居然忘记怎样在Excel上拟合正态分布了,尽管在第二天重新拾起了Excel中那几个常见的函数和图像的做法,还是十分的惭愧.实际上,当时有效偏颇了,忽略了问题 ...
- 【读书笔记与思考】《python数据分析与挖掘实战》-张良均
[读书笔记与思考]<python数据分析与挖掘实战>-张良均 最近看一些机器学习相关书籍,主要是为了拓宽视野.在阅读这本书前最吸引我的地方是实战篇,我通读全书后给我印象最深的还是实战篇.基 ...
- python数据分析工具包(3)——matplotlib(一)
前两篇文章简单介绍了科学计算Numpy的一些常用方法,还有一些其他内容,会在后面的实例中学习.下面介绍另一个模块--Matplotlib. Matplotlib是一个Python 2D绘图库,试图让复 ...
- python 数据分析工具之 numpy pandas matplotlib
作为一个网络技术人员,机器学习是一种很有必要学习的技术,在这个数据爆炸的时代更是如此. python做数据分析,最常用以下几个库 numpy pandas matplotlib 一.Numpy库 为了 ...
- 《python for data analysis》第二章,美国1880-2010年出生人口姓名的数据分析
<利用python进行数据分析>第二章的姓名例子,代码.整个例子的所有代码集成到了一个文件中,导致有些对象名如year同时作为了列名与行名,会打印warning,可分不同的part依次运行 ...
随机推荐
- [AGC59C] Guessing Permutation for as Long as Possible
Problem Statement A teacher has a hidden permutation $P=(P_1,P_2,\ldots,P_N)$ of $(1,2,\cdots,N)$. Y ...
- springBoot——读取数据
在yml文件中读取数据,用$符号就可以 类似于这样的 如果要读取yml里面全部的数据,就用自动装配来写 而如果要用实体类来读取里面的数据 package com.example.springboot_ ...
- MinIO客户端之head
MinIO提供了一个命令行程序mc用于协助用户完成日常的维护.管理类工作. 官方资料 mc head 查看对象的前N行内容,N默认为10,命令如下: ./mc head local1/bkt1/doc ...
- 8.解决elasticsearch深度分页问题
前面说到,分页可以使用from和size参数,类似于mysql的分页offset和limit.但是如果数据量比较大时,elasticsearch会对分页做出限制,因为此时会比较消耗性能. 为什么要限制 ...
- Tailscale 基础教程:Headscale 的部署方法和使用教程
Tailscale 是一种基于 WireGuard 的虚拟组网工具,它在用户态实现了 WireGuard 协议,相比于内核态 WireGuard 性能会有所损失,但在功能和易用性上下了很大功夫: 开箱 ...
- ubuntu安装mysql8,debian安装mysql8,linux安装mysql8,x86_64架构,deb包
作者主页:https://www.cnblogs.com/milkbox 参考: 修改大小写:MySQL8.0安装后更改不区分大小写!包你必生效!_mysql8.0不区分大小写-CSDN博客 整个安装 ...
- 使用推测解码 (Speculative Decoding) 使 Whisper 实现 2 倍的推理加速
Open AI 推出的 Whisper 是一个通用语音转录模型,在各种基准和音频条件下都取得了非常棒的结果.最新的 large-v3 模型登顶了 OpenASR 排行榜,被评为最佳的开源英语语音转录模 ...
- 聊一聊如何整合Microsoft.Extensions.DependencyInjection和Castle.Core(完结篇)
前言 书接上回,上回我们了解了 castle 代理的一些缺点,本文将开始操作整合 Microsoft.Extension.Dependency和Castle,以让默认的容器可以支持拦截器 我们将以进阶 ...
- JavaImprove--Lesson01--枚举类,泛型
一.枚举 认识枚举类 枚举是一种特殊的类 枚举的格式: 修饰符 enmu 枚举类名{ 名称1,名称2: 其它成员 } //枚举类 public enum A { //枚举类的第一列必须是罗列枚举 ...
- GOF23--23种设计模式(二)
一.建造者模式 建造者模式也是属于建造型模式,它提供了一种创建对象的最佳方式 定义:将一个复杂的对象的构建和它的表示分离,使得同样的构建过程可以创建不同的表示 主要作用:在用户不知道对象的构建细节的情 ...