日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > C# >内容正文

C#

c# GDI+画折线图(初级版本)

發(fā)布時間:2024/1/17 C# 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c# GDI+画折线图(初级版本) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

??????? /// <summary>
??????? /// 制作折線圖類
??????? /// </summary>
??????? /// <param name="x">中心點x值</param>
??????? /// <param name="y">中心點y值</param>
??????? /// <param name="xylength">x,y軸長度</param>
??????? /// <param name="xString">x軸說明</param>
??????? /// <param name="yString">y軸說明</param>
??????? /// <param name="xInfo">x數(shù)據(jù)</param>
??????? /// <param name="yInfo">y數(shù)據(jù)</param>
??????? /// <param name="maxPoint">從數(shù)據(jù)庫獲取y軸最大數(shù)據(jù)</param>?

public Bitmap CreateLine(float x,float y,float xylength,string xString,string yString,string[] xInfo,float[] yInfo,float maxPoint)
??????? {
??????????? Bitmap bitmap = new Bitmap(this.Width, this.Height);//定義畫布
??????????? Graphics g = Graphics.FromImage(bitmap);
??????????? g.Clear(Color.White);

??????????? PointF p = new PointF(x, y);//中心點
??????????? PointF[] xpt = new PointF[3] { new PointF(p.X + xylength + 15, p.Y), new PointF(p.X + xylength, p.Y - 8), new PointF(p.X + xylength, p.Y + 8) };//x軸三角形
??????????? PointF[] ypt = new PointF[3] { new PointF(p.X, p.Y - xylength - 15), new PointF(p.X - 8, p.Y - xylength), new PointF(p.X + 8, p.Y - xylength) };//y軸三角形

??????????? //x
??????????? g.DrawLine(Pens.Black, p.X, p.Y, p.X + xylength, p.Y);
??????????? g.DrawPolygon(Pens.Black, xpt);
??????????? g.FillPolygon(Brushes.Black, xpt);
??????????? g.DrawString(xString, new Font("宋體", 12), new SolidBrush(Color.Red), p.X + xylength + 10, p.Y + 10);

??????????? //y
??????????? g.DrawLine(Pens.Black, p.X, p.Y - xylength, p.X, p.Y);
??????????? g.DrawPolygon(Pens.Black, ypt);
??????????? g.FillPolygon(Brushes.Black, ypt);
??????????? g.DrawString(yString, new Font("宋體", 12), new SolidBrush(Color.Red), p.X - 40, p.Y - xylength - 30);
??????????? //像素點
??????????? int point = (int)(p.Y / xInfo.Length);

??????????? int ypoint = 0;
??????????? if (maxPoint.ToString().Substring(0, 1) == "1")
??????????? {
??????????????? ypoint = 10;
??????????? }
??????????? else
??????????? {
??????????????? int sale = Convert.ToInt32(maxPoint);
??????????????? int length = sale.ToString().Length;
??????????????? string max = maxPoint.ToString().Substring(0, 1);
??????????????? string cz = "1";
??????????????? for (int a = 1; a < length; a++)
??????????????? {
??????????????????? cz += "0";
??????????????????? max += "0";
??????????????? }
??????????????? maxPoint = Convert.ToSingle(cz) + Convert.ToSingle(max);
??????????????? ypoint = (int)(maxPoint / Convert.ToSingle(cz));

??????????? }

??????????? //畫Y刻度
??????????? for (int kd = 1; kd <= ypoint; kd++)
??????????? {
??????????????? float kdy = p.Y - (360 / maxPoint) * (maxPoint / ypoint * kd);
??????????????? g.DrawString(Convert.ToString(maxPoint / ypoint * kd), new Font("宋體", 10), Brushes.Black, p.X - 40, kdy - 5);
??????????????? g.DrawLine(Pens.Black, p.X - 5, kdy, p.X, kdy);
??????????? }

??????????? for (int i = 0; i < xInfo.Length; i++)
??????????? {

??????????????? //畫x軸項目
??????????????? g.DrawString(xInfo[i], new Font("宋體", 10), Brushes.Black, new PointF(p.X + i * point - 5, p.Y + 5));

??????????????? g.DrawEllipse(Pens.Black, p.X + i * point - 1.5f, p.Y - 360 / maxPoint * yInfo[i], 3, 3);
??????????????? g.FillEllipse(new SolidBrush(Color.Black), p.X + i * point - 1.5f, p.Y - 360 / maxPoint * yInfo[i], 3, 3);

??????????????? //畫數(shù)值
??????????????? g.DrawString(yInfo[i].ToString(), new Font("宋體", 10), Brushes.Black, p.X + i * point, p.Y - 360 / maxPoint * yInfo[i]);
??????????????? //畫折線
??????????????? if (i + 1 < xInfo.Length)
??????????????????? g.DrawLine(Pens.Red, p.X + i * point, p.Y - 360 / maxPoint * yInfo[i], p.X + (i + 1) * point, p.Y - 360 / maxPoint * yInfo[i + 1]);
??????????? }
??????????? return bitmap;
??????? }

?

//在窗體中調(diào)用

?DataSet ds = DBUitily.ExecuteQuerySql("select * from t_Users");//橫坐標(biāo)數(shù)據(jù)源
??????????? string[] Users = new string[ds.Tables[0].Rows.Count];
??????????? float[] Sales = new float[ds.Tables[0].Rows.Count];
??????????? for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
??????????? {
??????????????? Users[i] = ds.Tables[0].Rows[i][0].ToString();
??????????????? Sales[i] = Convert.ToSingle(DBUitily.ExecuteScalarSql("select sum(SaleMoney) from t_Sales where UserId='" + Users[i] + "'"));//縱坐標(biāo)數(shù)據(jù)源
??????????? }
??????????? float maxValue = Convert.ToSingle(DBUitily.ExecuteScalarSql("select Sum(SaleMoney) from t_Sales group by UserId order by Sum(SaleMoney) Desc"));

??????????? picChart.Image = CreateLine(300, 450, 400, "人員編號", "銷售價格(元)", Users, Sales, maxValue);

效果圖片:

轉(zhuǎn)載于:https://www.cnblogs.com/shengtianlong/archive/2010/06/12/1756989.html

總結(jié)

以上是生活随笔為你收集整理的c# GDI+画折线图(初级版本)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。