实例介绍
【实例简介】导入数据,实现在坐标系上绘画出折线图
【实例截图】
【核心代码】
public partial class Form1 : Form { public Form1() { InitializeComponent(); } bool flag = false; ToolTip tooltip = new ToolTip(); int[] bufx = new int[1024]; int[] bufy = new int[1024]; string resultFile;//定义文本框的值 int readlen = 0;//定义输出点个数 //重载后方法! protected override void OnPaint(PaintEventArgs e) { //标志为flase时,不画线 if (flag == false) return; Graphics g = e.Graphics; g.DrawLine(Pens.Black, 10, 10, 100, 100); } //全局定义 int width = 800, height = 350; //定义画布大小 System.Drawing.Bitmap image = new System.Drawing.Bitmap(950, 500); //创建位图(Draw 绘制) //创建坐标系 private void draw(int[] xbuf, int[] ybuf)//创建坐标系方法(xbuf,ybuf绘制点坐标数组) { //创建Graphics类对象(Graphics 绘图)(Graphics在已知的控件上的方法) Graphics g = Graphics.FromImage(image); //定义填充图图形 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); Brush brush1 = new SolidBrush(Color.Blue); Brush brush2 = new SolidBrush(Color.SaddleBrown); //定义画笔 System.Drawing.Pen mypen = new Pen(brush, 1); System.Drawing.Pen mypen2 = new Pen(Color.Green, 2); System.Drawing.Pen mypen3 = new Pen(Color.Green, 1); Pen mypen4 = new Pen(Color.Green, 2); //定义字体 Font font = new System.Drawing.Font("Arial", 9, FontStyle.Regular); Font font1 = new System.Drawing.Font("宋体", 20, FontStyle.Regular); Font font2 = new System.Drawing.Font("Arial", 8, FontStyle.Regular); //清空图片背景色 g.Clear(Color.White); //创建点 PointF center_Pt = new PointF(475, 225);//定义原点(中心点) float Xaxis_length = 405.0F; float Yaxis_length = 205.0F; PointF Xaxis_Begin = new PointF(center_Pt.X - Xaxis_length, center_Pt.Y);//X轴首端点 PointF Xaxis_EndPt = new PointF(center_Pt.X Xaxis_length, center_Pt.Y);//X轴末端点 PointF Yaxis_Begin = new PointF(center_Pt.X, center_Pt.Y Yaxis_length);//Y轴首端点 PointF Yaxis_EndPt = new PointF(center_Pt.X, center_Pt.Y - Yaxis_length);//Y轴末端点 //①绘制由坐标对、宽度和高度指定的矩形( x, y, width, height)(绘制边框线) g.DrawRectangle(new Pen(Color.Black), Xaxis_Begin.X, Yaxis_EndPt.Y, 810, 410); //② 画X轴 画Y轴 (复杂方法) // g.DrawLine(Pens.Black, Xaxis_Begin.X, Xaxis_Begin.Y, Xaxis_EndPt.X, Xaxis_EndPt.Y);//X轴首 末=左右 // g.DrawLine(Pens.Black, Yaxis_Begin.X, Yaxis_Begin.Y, Yaxis_EndPt.X, Yaxis_EndPt.Y);//Y轴首 末=上下 //画Y轴三角形箭头和单位 PointF[] yPt = new PointF[3] { new PointF(Xaxis_Begin.X, Yaxis_EndPt.Y - 20), new PointF(Xaxis_Begin.X - 8, Yaxis_EndPt.Y), new PointF(Xaxis_Begin.X 8, Yaxis_EndPt.Y) };//定位一个三角形有序对数组(位置) g.DrawPolygon(Pens.Black, yPt);//画三角形箭头 g.FillPolygon(new SolidBrush(Color.Black), yPt);//填充成实心 g.DrawString("Elec(°)", new Font("宋体", 12), Brushes.Black, new PointF(Xaxis_Begin.X - 70, Yaxis_EndPt.Y));//单位 //画X轴三角形箭头和单位 PointF[] xPt = new PointF[3] { new PointF(Xaxis_EndPt.X 20, Yaxis_Begin.Y), new PointF(Xaxis_EndPt.X, Yaxis_Begin.Y - 8), new PointF(Xaxis_EndPt.X, Yaxis_Begin.Y 8) };//定位一个三角形有序对数组(位置) g.DrawPolygon(Pens.Black, xPt);//画三角形箭头 g.FillPolygon(new SolidBrush(Color.Black), xPt); //填充成实心 g.DrawString("Angle(°)", new Font("宋体", 12), Brushes.Black, new PointF(Xaxis_EndPt.X - 15, Yaxis_Begin.Y 20));//单位 //添加背景颜色 g.FillRectangle(Brushes.Lavender, Xaxis_Begin.X 1, Yaxis_EndPt.Y 1, width 9, height 59); //绘制线条 //绘制纵向线条 //x和y(430)为首个竖向线条的位置,13为竖向线条总数,60为竖向间隔 float x = 140; for (int i = 0; i < 11; i ) { g.DrawLine(mypen, x, Yaxis_Begin.Y, x, Yaxis_EndPt.Y); x = x 67; } //绘制横向线条 //y和x(820)为首个横向线条的位置,7为横向线条总数,45为横向间隔 float y = 75; for (int i = 0; i < 7; i ) { g.DrawLine(mypen, Xaxis_Begin.X, y, Xaxis_EndPt.X, y); y = y 51; } //绘制一条虚线(标准线) mypen4.DashStyle = System.Drawing.Drawing2D.DashStyle.DashDot; g.DrawLine(mypen4, new Point(70, 35), new Point(882, 35)); //刻度 //x轴上对应的标记 String[] n = { " -180", " -150", " -120", " -90", " -60", " -30", " 0", " 30", " 60", " 90", "120", "150", "180" }; //设置文字内容及输出位置(DrawString 在指定位置输出文本) //x和y(435)为首个刻度的位置,13为刻度总数,60为刻度间隔 x = 50.0F; for (int i = 0; i < 13; i ) { g.DrawString(n[i].ToString(), font, Brushes.Red, x, 435); x = x 68.5F; } //y轴上对应的标记 String[] m = { " 0", " -10", " -20", " -30", " -40", " -50", " -60", " -70", " -80" }; //设置文字内容及输出位置(DrawString 在指定位置输出文本) //x(70)和y为首个刻度的位置,13为刻度总数,60为刻度间隔 y =12.5F; for (int i = 0; i < 9; i ) { g.DrawString(m[i].ToString(), font, Brushes.Red, 40, y); y = y 51.4F; } g.Dispose(); this.pictureBox1.Image = image; } //图片框 private void pictureBox1_Click(object sender, EventArgs e) { } //Form1 private void Form1_Paint(object sender, PaintEventArgs e) { draw(bufx, bufy); } //选取文件按钮 private void button1_Click(object sender, EventArgs e) { //第一种:folderBrowserDialog1为选取文件夹控件 //if (folderBrowserDialog1.ShowDialog() == DialogResult.OK) //{ // textBox1.Text = folderBrowserDialog1.SelectedPath; //} //第二种:openFileDialog1为选取文件控件 openFileDialog1.InitialDirectory = "c:\\";//注意这里写路径时要用c:\\而不是c:\ openFileDialog1.Filter = "文本文件|*.txt";//筛选文件类型 openFileDialog1.RestoreDirectory = true; //控制对话框在关闭之前是否恢复当前目录 openFileDialog1.FilterIndex = 1; //在对话框中选择的文件筛选器的索引,如果选第一项就设为1 if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK) { System.IO.StreamReader sr = new System.IO.StreamReader(openFileDialog1.FileName); //MessageBox.Show(sr.ReadToEnd()); //显示选取的文本文件内容 //在文本框显示文件路径 resultFile = openFileDialog1.FileName; textBox1.Text = resultFile;// sr.Close(); } } //进行绘图按钮 private void button2_Click(object sender, EventArgs e) { Graphics gph = Graphics.FromImage(image); //定义折线图原点 gph.TranslateTransform(474, 30); Pen pn = new Pen(Color.Red, 1); readlen = 0; if (resultFile == null) { //报错弹出框 MessageBox.Show("请选取要绘图的文件!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } else { //文件不为空的时候读取文件 StreamReader read = new StreamReader(File.Open(textBox1.Text, FileMode.Open), System.Text.Encoding.Default); List<float> x = new List<float>(); List<float> y = new List<float>(); while (true) { string strLine = read.ReadLine(); if (strLine == null || strLine == "") { break; } else { string[] sl = strLine.Split(new char[] { '\t' }); if (sl[0] != "!") { x.Add(2.25F * float.Parse(sl[0])); y.Add(-4.9F * float.Parse(sl[1])); } } if (strLine.Length >= 3) { String[] date = strLine.Split(','); int len = date.Length; //label2.Text =Convert.ToString(date[11]); int j = 0; for (int p = 0; p < len / 2; p ) { //x:70 ,4* x=70 4*d; //y:310,*6 y=310-6*d bufx[readlen / 2 p] = Convert.ToInt32(date[j]) * 4 40; bufy[readlen / 2 p] = 310 - Convert.ToInt32(date[j 1]) * 6; j = 2; } readlen = len; } } //关闭数据流 read.Close(); int i = 5; while (true) { if (i >= x.Count - 1) { break; } else { gph.DrawLine(Pens.Red, x[i], y[i], x[i 1], y[i 1]); i ; } } //输出点数 gph.Dispose(); label2.Text = Convert.ToString("输出点个数:" readlen); this.pictureBox1.Image = image; } } //清除数据按钮 private void button3_Click(object sender, EventArgs e) { draw(bufx, bufy); label2.Text = Convert.ToString("输出点个数:"); } //文本框 private void textBox1_TextChanged(object sender, EventArgs e) { }
好例子网口号:伸出你的我的手 — 分享!
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论