C# 柱状图.docx

上传人:b****7 文档编号:8713853 上传时间:2023-02-01 格式:DOCX 页数:7 大小:17.69KB
下载 相关 举报
C# 柱状图.docx_第1页
第1页 / 共7页
C# 柱状图.docx_第2页
第2页 / 共7页
C# 柱状图.docx_第3页
第3页 / 共7页
C# 柱状图.docx_第4页
第4页 / 共7页
C# 柱状图.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

C# 柱状图.docx

《C# 柱状图.docx》由会员分享,可在线阅读,更多相关《C# 柱状图.docx(7页珍藏版)》请在冰豆网上搜索。

C# 柱状图.docx

C#柱状图

 //Render是图形大标题,图开小标题,图形宽度,图形长度,饼图的数据集和饼图的数据集

        publicImageRender(stringtitle,intwidth,intheight,DataTablechartTable)

        {

            Bitmapbm=newBitmap(width,height);

            Graphicsg=Graphics.FromImage(bm);

            g.Clear(Color.White);

            DataTabledt=chartTable;

            constinttop=30;

            constintleft=35;

            if(width

            {

                g.DrawString("绘图区域太小",newFont("Tahoma",8),

                    Brushes.Blue,newPointF(0,0));

                returnbm;

            }

            //计算最高的点

            floathighPoint=1;

            foreach(DataRowdrindt.Rows)

            {

               if(highPoint

                {

                    highPoint=Convert.ToSingle(dr[0]);

                }

                if(highPoint

                {

                    highPoint=Convert.ToSingle(dr[1]);

                }

            }

            try

            {

                //画大标题

                g.DrawString(title,newFont("Tahoma",12),Brushes.Black,newPointF(2,2));

                StringFormatdrawFormat=newStringFormat();

                drawFormat.FormatFlags=StringFormatFlags.DirectionVertical;

                g.DrawString("[红--"+dt.Columns[0].ToString()+"]",newFont("Tahoma",8),

                    Brushes.Red,newPointF(2,top),drawFormat);

                g.DrawString("[蓝--"+dt.Columns[1].ToString()+"]",newFont("Tahoma",8),

                    Brushes.Blue,newPointF(17,top),drawFormat);

                //画条形图

                floatbarWidth=(Convert.ToSingle(width)-left)/(dt.Rows.Count*3+1);

                PointFbarOrigin=newPointF(left+barWidth,0);

                floatbarHeight=dt.Rows.Count;

                floattopFontSize=(barWidth/highPoint.ToString().Length);

                

                if(topFontSize>2*top/3)

                {

                    topFontSize=2*top/3;

                }

                if(topFontSize<5)

                {

                    topFontSize=5;

                }

                for(inti=0;i

                {

                    //底部字体的大小

                    floatbottomFontSize=(2*barWidth/dt.Rows[i][2].ToString().Length)+2;

                    if(bottomFontSize>2*top/3)

                    {

                        bottomFontSize=2*top/3;

                    }

                    barHeight=Convert.ToSingle(dt.Rows[i][0])*(height-2*top)/highPoint*1;

                    barOrigin.Y=height-barHeight-top;

                    g.FillRectangle(newSolidBrush(Color.Red),barOrigin.X,barOrigin.Y,barWidth,barHeight);

                    //柱状图底部

                    g.DrawString(dt.Rows[i][2].ToString(),newFont("Tahoma",bottomFontSize),Brushes.Black,

                        newPointF(barOrigin.X,height-top));

                    //柱状图顶部

                    g.DrawString(dt.Rows[i][0].ToString(),newFont("Tahoma",topFontSize),Brushes.Red,

                        newPointF(barOrigin.X,barOrigin.Y-3*topFontSize/2));

                    barOrigin.X=barOrigin.X+barWidth;

 

                    barHeight=Convert.ToSingle(dt.Rows[i][1])*(height-2*top)/highPoint*1;

                    barOrigin.Y=height-barHeight-top;

                    g.FillRectangle(newSolidBrush(Color.Blue),barOrigin.X,barOrigin.Y,barWidth,

barHeight);

                    //柱状图顶部

                    g.DrawString(dt.Rows[i][1].ToString(),newFont("Tahoma",topFontSize),Brushes.Blue,

                        newPointF(barOrigin.X,barOrigin.Y-3*topFontSize/2));

                    barOrigin.X=barOrigin.X+(barWidth*2);

                }

                //设置边

                g.DrawLine(newPen(Color.Blue,2),newPoint(left,top),

                    newPoint(left,height-top));

                g.DrawLine(newPen(Color.Blue,2),newPoint(left,height-top),

                    newPoint(left+width,height-top));

                g.Dispose();

                returnbm;

            }

            catch

            {

                returnbm;

            }

        }

  1  

  2 

  3 Code

  4 using System;

  5 using System.Data;

  6 using System.Configuration;

  7 using System.Web;

  8 using System.Web.Security;

  9 using System.Web.UI;

 10 using System.Web.UI.WebControls;

 11 using System.Web.UI.WebControls.WebParts;

 12 using System.Web.UI.HtmlControls;

 13 using System.Drawing.Imaging;

 14 using System.Drawing; 

 15 /// 

 16 /// DrawingCurve 的摘要说明

 17 /// 

 18 public class DrawingCurve

 19 {

 20     

 21     public int intXLong = 800;   //图片大小 长

 22     public int intYLong = 600;   //图片大小 高

 23     public int intXMultiple = 1;    //零刻度的值 X

 24     public int intYMultiple = 0;    //零刻度的值 Y

 25     public int intXMax = 12;    //最大刻度(点数) X

 26     public int intYMax = 30;    //最大刻度(点数) Y

 27 

 28     public int intLeft = 50;   //左边距

 29     public int intRight = 120; //右边距

 30     public int intTop = 30;    //上边距

 31     public int intEnd = 50;    //下边距

 32 

 33     public string strXText = "时间(单位:

月)";    //单位 X

 34     public string strYText = "数量(单位:

个)";    //单位 Y

 35     public string strTitle = "趋势线图";    //标题

 36     public DataTable tbData;    //要统计的数据

 37 

 38 

 39     private int intXScale = 30;    //一刻度长度 X

 40     private int intYScale = 30;    //一刻度高度 Y

 41     //private int intX = 0;   //0点 X坐标

 42     //private int intY = 0;   //0点 Y坐标

 43     public int intData = 0;    //记录数

 44 

 45     public DrawingCurve()

 46     {

 47 

 48         intXScale = (intXLong - intLeft - intRight) / (intXMax + 1);//一刻度长度 X

 49         intYScale = (intYLong - intTop - intEnd) / (intYMax + 1);//一刻度高度 Y

 50 

 51         //intX = intXLong - intLeft;   //0点 X坐标

 52         //intY = intYLong - intEnd;   //0点 Y坐标

 53     }

 54 

 55     public Bitmap DrawingImg()

 56     {

 57 

 58         Bitmap img = new Bitmap(intXLong, intYLong); //图片大小

 59         Graphics g = Graphics.FromImage(img);

 60         g.Clear(Color.Snow);

 61         g.DrawString(strTitle, new Font("宋体", 14), Brushes.Black, new Point(5, 5));

 62         g.DrawLine(new Pen(Color.Black, 2), intLeft, intYLong - intEnd, intXLong - intRight, intYLong - intEnd); //绘制横向

 63         g.DrawLine(new Pen(Color.Black, 2), intLeft, intTop, intLeft, intYLong - intEnd);   //绘制纵向

 64 

 65         //绘制纵坐标

 66         g.DrawString(strYText, new Font("宋体", 12), Brushes.Black, new Point(intLeft, intTop));//Y 单位

 67         Point p1 = new Point(intLeft - 10, intYLong - intEnd);

 68         for (int j = 0; j <= intYMax; j++)

 69         {

 70             p1.Y = intYLong - intEnd - j * intYScale;

 71             Point pt = new Point(p1.X + 10, p1.Y);

 72             //绘制纵坐标的刻度和直线

 73             g.DrawLine(Pens.Black, pt, new Point(p1.X + 15, p1.Y));

 74             //绘制纵坐标的文字说明

 75             g.DrawString(Convert.ToString(j + intYMultiple), new Font("宋体", 12), Brushes.Black, new Point(p1.X - 25, p1.Y - 8));

 76         }

 77 

 78         //绘制横坐标

 79         g.DrawString(strXText, new Font("宋体", 12), Brushes.Black, new Point(intXLong - intRight, intYLong - intEnd));//X 单位

 80         Point p = new Point(intLeft, intYLong - intEnd);

 81         for (int i = 0; i < intXMax; i++)

 82         {

 83             p.X = intLeft + i * intXScale;

 84             //绘制横坐标刻度和直线

 85             g.DrawLine(Pens.Black, p, new Point(p.X, p.Y - 5));

 86             //绘制横坐标的文字说明

 87             g.DrawString(Convert.ToString(i + intXMultiple), new Font("宋体", 12), Brushes.Black, p);

 88         }

 89 

 90 

 91         intData = tbData.Rows.Count;

 92         if (intData > 0)

 93         {

 94             //趋势线图

 95             for (int i = 0; i < intData - 1; i++)

 96             {

 97                 DataRow Row1 = tbData.Rows[i];

 98                 DataRow Row2 = tbData.Rows[i + 1];

 99                 //定义起点

100                 Point rec = new Point(Convert.ToInt32(intLeft + ((TurnNumber(Row1[0].ToString()) - intXMultiple) * intXScale)), Convert.ToInt32(intYLong - intEnd - (TurnNumber(Row1[1].ToString()) - intYMultiple) * intYScale));

101                 //定义终点

102                 Point dec = new Point(Convert.ToInt32(intLeft + ((TurnNumber(Row2[0].ToString()) - intXMultiple) * intXScale)), Convert.ToInt32(intYLong - intEnd - (TurnNumber(Row2[1].ToString()) - intYMultiple) * intYScale));

103                 //绘制趋势折线

104                 g.DrawLine(new Pen(Color.Red), rec, dec);

105             }

106         }

107 

108         return img;

109     }

110 

111     //转换数字

112     private double TurnNumber(string str)

113     {

114         double dubReturn;

115         try

116         {

117             dubReturn = Convert.ToDouble(str);

118         }

119         catch

120         {

121             dubReturn = 0;

122         }

123         return dubReturn;

124 

125     }

126 

127 }

128 

129 ----------------------------------调用------------------------------------------------

130 

131 protected void Page_Load(object sender, EventArgs e)

132     {

133         DataTable MyTable = new DataTable();

134         

135 

136         string constr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("App_Data/db.mdb");

137         string cmdstr = "SELECT 月份,销量 FROM Result";

138         OleDbConnection con = new OleDbConnection(constr);

139         con.Open();

140         //OleDbCommand cmd = new OleDbCommand(cmdstr, con);

141         Ol

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 中医中药

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1