C#绘制曲线图

有一系列点,如下:时间(min)电压(v)0.0000-0.02500.0017-0.02700.0033-0.02700.0050-0.02800.00670.0270... 有一系列点,如下:
时间(min) 电压(v)
0.0000 -0.0250
0.0017 -0.0270
0.0033 -0.0270
0.0050 -0.0280
0.0067 0.0270
0.0083 0.0250

······
请教在C#中怎样把这些点绘制成曲线图?十分感谢!
展开
 我来答
xmandlp
2012-12-08 · TA获得超过484个赞
知道小有建树答主
回答量:498
采纳率:0%
帮助的人:305万
展开全部

我只能说给你个代码参考下吧 要真说起来蛮复杂的

 private void drowPic()//绘制图表的方法

        {

            Graphics g = this.CreateGraphics();       //创建Graphics对象

            g.Clear(Color.WhiteSmoke);        //设置背景色

            Pen p = new Pen(Color.Blue);        //绘制画笔

            //设置用到的字体

            Font fontO = new System.Drawing.Font("Arial", 9, FontStyle.Regular);

            Font fontT = new System.Drawing.Font("华文新魏", 16, FontStyle.Regular);

            //绘制边框与显示字体

            Point pointStart = new Point(0, 0);

            Size sizeWindows = new Size(this.Width - 8, this.Height - 34);  //创建Size对象

            Rectangle rect = new Rectangle(pointStart, sizeWindows);  //创建Rectangle对象

            g.DrawRectangle(p, rect);        //绘制矩形

            Brush brus = new SolidBrush(Color.Red);      //创建笔刷

            g.DrawString("网站人气指数曲线分析", fontT, brus, this.Width / 2.00f - 150, 10.00f);

            //绘制网格线

            int x = this.Width / 10;

            int y = this.Height / 14;

            int z = this.Width / 10;

            int k = y * 12;

            //X

            for (int i = 0; i < 12; i++)

            {

                g.DrawLine(p, x, y * 3 - 10, x, y * 12);     //绘制水平线条

                x = x + (this.Width - 34) / 14;

            }

            //X轴

            String[] n = {" 1月", " 2月", " 3月", " 4月", " 5月", " 6月", " 7月",

             " 8月", " 9月", "10月", "11月", "12月"};   //绘制月份

            x = this.Width / 10 - 16;

            for (int i = 0; i < 12; i++)

            {

                g.DrawString(n[i].ToString(), fontO, Brushes.Red, x, y * 12); //设置文字内容及输出位置

                x = x + (this.Width - 34) / 14;

            }

            //Y

            for (int i = 0; i < 12; i++)

            {

                g.DrawLine(p, z, k, x + 10, k);       //绘制垂直线条

                k = k - (y * 12) / 16;

            }

            //Y轴

            int h = k;

            String[] m = {"5500","5000","4500", "4000", "3500", "3000", "2500", "2000", "1500", "1000",

             "  500"};         //绘制Y轴显示的文字

            k = y * 12;

            for (int i = 0; i < 11; i++)

            {

                g.DrawString(m[10 - i].ToString(), fontO, Brushes.Red, z - 35, k - y); //开始绘制文字

                k = k - (y * 12) / 16;

            }

            int[] Count = new int[12];

            Pen mypen = new Pen(Color.Red, 2);      //创建画笔

            Point[] points = new Point[12];

            x = this.Width / 10;

            k = y * 12;

 

            SqlConnection Con = new SqlConnection("Server=WRET-MOSY688YVW\\MRGLL;DataBase=db_TomeOne;Uid=sa;Pwd=");

            string cmdtxt2 = "SELECT * FROM tb_reticulation";     //声明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对象

//以上数据库的操作是读取出每个点的数值 看你具体情况而定 可以省略 可直接运行下面的for代码段 把你的数据输入进去

 

            int j = 0;

            for (j = 0; j < 12; j++)

            {

                //与Y轴数生成有关(y * 12)/16因为起始为500

                Count[j] = Convert.ToInt32(ds.Tables[0].Rows[0][j + 2].ToString()) * (y * 12) / 16 / 500;

            }

            //设置绘制曲线的坐标数组

            points[0].X = x; points[0].Y = k - Count[0];

            x = x + (this.Width - 34) / 14;

            points[1].X = x; points[1].Y = k - Count[1];

            x = x + (this.Width - 34) / 14;

            points[2].X = x; points[2].Y = k - Count[2];

            x = x + (this.Width - 34) / 14;

            points[3].X = x; points[3].Y = k - Count[3];

            x = x + (this.Width - 34) / 14;

            points[4].X = x; points[4].Y = k - Count[4];

            x = x + (this.Width - 34) / 14;

            points[5].X = x; points[5].Y = k - Count[5];

            x = x + (this.Width - 34) / 14;

            points[6].X = x; points[6].Y = k - Count[6];

            x = x + (this.Width - 34) / 14;

            points[7].X = x; points[7].Y = k - Count[7];

            x = x + (this.Width - 34) / 14;

            points[8].X = x; points[8].Y = k - Count[8];

            x = x + (this.Width - 34) / 14;

            points[9].X = x; points[9].Y = k - Count[9];

            x = x + (this.Width - 34) / 14;

            points[10].X = x; points[10].Y = k - Count[10];

            x = x + (this.Width - 34) / 14;

            points[11].X = x; points[11].Y = k - Count[11];

            g.DrawLines(mypen, points);         //绘制折线 

        }

最后的结果如下:

dinkfamily
2012-12-08 · TA获得超过602个赞
知道小有建树答主
回答量:387
采纳率:50%
帮助的人:213万
展开全部
chart类可以实现这个图标功能,使用 DataBindings 属性绑定到数据源。你可以参考微软帮助文档中的chart类中的属性和方法。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
MyAppleKnows
2012-12-08 · TA获得超过695个赞
知道小有建树答主
回答量:448
采纳率:0%
帮助的人:418万
展开全部
不明白你想要干嘛啊。。能绘图的软件多得很,干嘛非要用C#编程实现。用Matlab不就马上出来了吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式