实例介绍
【实例简介】导入数据,实现在坐标系上绘画出折线图
【实例截图】
【核心代码】
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小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明


网友评论
我要评论