这篇文章给大家分享的是有关C#如何绘制柱状图和折线图的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

具体内容如下

运行效果如下图:

设计上面的柱状图和折线图其实并没有什么难度,主要是各个坐标的计算,完全是精细活。首先在窗体在添加了一个tabControl控件来切换柱状图和折线图的显示,在tabPage1中显示柱状图,在tabPage2中显示折线图。然后在各自的Page页属性中定义Paint事件,具体实现过程可以从下面的代码中看到。

代码如下:

添加头文件:

usingSystem.Drawing.Drawing2D;

tabPage1的Paint事件(画柱状图):

privatevoidtabPage1_Paint(objectsender,PaintEventArgse){BackColor=Color.White;//标题Graphicsg=tabPage1.CreateGraphics();Fontf=newFont("宋体",24,FontStyle.Regular);Penp=newPen(Color.Blue);g.DrawString("报名及考试统计柱状图",f,p.Brush,200,20);//画表格for(inti=0;i<=9;i++){g.DrawLine(p,30,90+31*i,620,90+31*i);}for(inti=1;i<=14;i++){g.DrawLine(p,30+42*i,60,30+42*i,370);}PenMyPen=newPen(Color.Blue,2);Pointp1=newPoint(30,60);Pointp2=newPoint(30,370);Pointp3=newPoint(30,370);Pointp4=newPoint(620,370);g.DrawLine(MyPen,p1,p2);g.DrawLine(MyPen,p3,p4);//红色图形部分PendrawPen=newPen(Color.Red,1);SolidBrushmybrush=newSolidBrush(Color.Red);e.Graphics.DrawRectangle(drawPen,30+21,370-41,21,41);e.Graphics.FillRectangle(mybrush,30+21,370-41,21,41);e.Graphics.DrawRectangle(drawPen,30+42*2+21,370-31*4-10,21,31*4+10);e.Graphics.FillRectangle(mybrush,30+42*2+21,370-31*4-10,21,31*4+10);e.Graphics.DrawRectangle(drawPen,30+42*4+21,370-31*2-20,21,31*2+20);e.Graphics.FillRectangle(mybrush,30+42*4+21,370-31*2-20,21,31*2+20);e.Graphics.DrawRectangle(drawPen,30+42*6+21,370-31*1-20,21,31*1+20);e.Graphics.FillRectangle(mybrush,30+42*6+21,370-31*1-20,21,31*1+20);e.Graphics.DrawRectangle(drawPen,30+42*8+21,370-31*5-25,21,31*5+25);e.Graphics.FillRectangle(mybrush,30+42*8+21,370-31*5-25,21,31*5+25);e.Graphics.DrawRectangle(drawPen,30+42*10+21,370-31*4-7,21,31*4+7);e.Graphics.FillRectangle(mybrush,30+42*10+21,370-31*4-7,21,31*4+7);e.Graphics.DrawRectangle(drawPen,30+42*12+21,60,21,370-60);e.Graphics.FillRectangle(mybrush,30+42*12+21,60,21,370-60);//绿色图形部分PendrawPen2=newPen(Color.Green,1);SolidBrushbrush=newSolidBrush(Color.Green);e.Graphics.DrawRectangle(drawPen2,30+42,370-31,21,31);e.Graphics.FillRectangle(brush,30+42,370-31,21,31);e.Graphics.DrawRectangle(drawPen2,30+42*3,370-31*2-15,21,31*2+15);e.Graphics.FillRectangle(brush,30+42*3,370-31*2-15,21,31*2+15);e.Graphics.DrawRectangle(drawPen2,30+42*5,370-31-10,21,41);e.Graphics.FillRectangle(brush,30+42*5,370-31-10,21,41);e.Graphics.DrawRectangle(drawPen2,30+42*7,370-16,21,16);e.Graphics.FillRectangle(brush,30+42*7,370-16,21,16);e.Graphics.DrawRectangle(drawPen2,30+42*9,370-31*3-20,21,31*3+20);e.Graphics.FillRectangle(brush,30+42*9,370-31*3-20,21,31*3+20);e.Graphics.DrawRectangle(drawPen2,30+42*11,370-31*1-28,21,31*1+28);e.Graphics.FillRectangle(brush,30+42*11,370-31*1-28,21,31*1+28);e.Graphics.DrawRectangle(drawPen2,30+42*13,370-31*5-15,21,31*5+15);e.Graphics.FillRectangle(brush,30+42*13,370-31*5-15,21,31*5+15);//图上的文字部分Fontfont2=newFont("宋体",10,FontStyle.Regular);g.DrawString("第一期",font2,p.Brush,30+21,375);g.DrawString("第二期",font2,p.Brush,30+42*2+21,375);g.DrawString("第三期",font2,p.Brush,30+42*4+21,375);g.DrawString("第四期",font2,p.Brush,30+42*6+21,375);g.DrawString("上半年",font2,p.Brush,30+42*8+21,375);g.DrawString("下半年",font2,p.Brush,30+42*10+21,375);g.DrawString("全年统计",font2,p.Brush,30+42*12+21,375);//图上数字部分g.DrawString("25",font2,p.Brush,10,370-35);g.DrawString("50",font2,p.Brush,10,370-35*2);g.DrawString("75",font2,p.Brush,10,370-34*3);g.DrawString("100",font2,p.Brush,5,370-33*4);g.DrawString("125",font2,p.Brush,5,370-33*5);g.DrawString("150",font2,p.Brush,5,370-32*6);g.DrawString("175",font2,p.Brush,5,370-32*7);g.DrawString("200",font2,p.Brush,5,370-32*8);g.DrawString("225",font2,p.Brush,5,370-32*9);g.DrawString("250",font2,p.Brush,5,370-32*10);//红色数Penpen2=newPen(Color.Red);g.DrawString("39",font2,pen2.Brush,30+21,370-41-15);g.DrawString("111",font2,pen2.Brush,30+42*2+21,370-31*4-10-15);g.DrawString("71",font2,pen2.Brush,30+42*4+21,370-31*2-20-15);g.DrawString("40",font2,pen2.Brush,30+42*6+21,370-31*1-20-15);g.DrawString("150",font2,pen2.Brush,30+42*8+21,370-31*5-25-15);g.DrawString("111",font2,pen2.Brush,30+42*10+21,370-31*4-7-15);g.DrawString("261",font2,pen2.Brush,30+42*12+21,60-15);//绿色数Penpen3=newPen(Color.Green);g.DrawString("39",font2,pen2.Brush,30+21,370-41-15);g.DrawString("111",font2,pen2.Brush,30+42*2+21,370-31*4-10-15);g.DrawString("71",font2,pen2.Brush,30+42*4+21,370-31*2-20-15);g.DrawString("40",font2,pen2.Brush,30+42*6+21,370-31*1-20-15);g.DrawString("150",font2,pen2.Brush,30+42*8+21,370-31*5-25-15);g.DrawString("111",font2,pen2.Brush,30+42*10+21,370-31*4-7-15);g.DrawString("261",font2,pen2.Brush,30+42*12+21,60-15);//最下面的矩形框e.Graphics.DrawRectangle(p,30+42*2+30,400,42*7,31*2);e.Graphics.DrawRectangle(drawPen,30+42*5,410,21,10);e.Graphics.FillRectangle(mybrush,30+42*5,410,21,10);g.DrawString("报名人数",font2,pen2.Brush,30+42*6,410);e.Graphics.DrawRectangle(drawPen2,30+42*5,440,21,10);e.Graphics.FillRectangle(brush,30+42*5,440,21,10);g.DrawString("通过人数",font2,pen3.Brush,30+42*6,440);}

tabPage2的Paint事件(画折线图):

privatevoidtabPage2_Paint(objectsender,PaintEventArgse){BackColor=Color.White;//标题Graphicsg=tabPage2.CreateGraphics();Fontf=newFont("宋体",24,FontStyle.Regular);Penp=newPen(Color.Blue);g.DrawString("报名及考试统计折线图",f,p.Brush,200,20);//画表格for(inti=0;i<=9;i++){g.DrawLine(p,30,90+31*i,620,90+31*i);}for(inti=1;i<=7;i++){g.DrawLine(p,30+84*i,60,30+84*i,370);}PenMyPen=newPen(Color.Blue,2);Pointp1=newPoint(30,60);Pointp2=newPoint(30,370);Pointp3=newPoint(30,370);Pointp4=newPoint(620,370);g.DrawLine(MyPen,p1,p2);g.DrawLine(MyPen,p3,p4);//绘制折线Penpen1=newPen(Color.Red,2);Penpen2=newPen(Color.Green,2);//红色折线Pointa1,a2,a3,a4,a5,a6,a7;a1=newPoint(30,370-31-20);a2=newPoint(30+84*1,370-(31*4+9));a3=newPoint(30+84*2,370-(31*2+28));a4=newPoint(30+84*3,370-(31*1+20));a5=newPoint(30+84*4,370-(31*5+21));a6=newPoint(30+84*5,370-(31*4+10));a7=newPoint(30+84*6,60);Point[]points={a1,a2,a3,a4,a5,a6,a7};g.DrawLines(pen1,points);//绿色折线Pointb1,b2,b3,b4,b5,b6,b7;b1=newPoint(30,370-(31*1+1));b2=newPoint(30+84*1,370-(31*2+15));b3=newPoint(30+84*2,370-(31*1+10));b4=newPoint(30+84*3,370-(31*0+15));b5=newPoint(30+84*4,370-(31*3+15));b6=newPoint(30+84*5,370-(31*1+29));b7=newPoint(30+84*6,370-(31*5+14));Point[]points2={b1,b2,b3,b4,b5,b6,b7};g.DrawLines(pen2,points2);//图上数字部分Fontfont2=newFont("宋体",10,FontStyle.Regular);g.DrawString("25",font2,pen1.Brush,10,370-35);g.DrawString("50",font2,pen1.Brush,10,370-35*2);g.DrawString("75",font2,pen1.Brush,10,370-34*3);g.DrawString("100",font2,pen1.Brush,5,370-33*4);g.DrawString("125",font2,pen1.Brush,5,370-33*5);g.DrawString("150",font2,pen1.Brush,5,370-32*6);g.DrawString("175",font2,pen1.Brush,5,370-32*7);g.DrawString("200",font2,pen1.Brush,5,370-32*8);g.DrawString("225",font2,pen1.Brush,5,370-32*9);g.DrawString("250",font2,pen1.Brush,5,370-32*10);//文字g.DrawString("第一期",font2,pen1.Brush,15,375);g.DrawString("第二期",font2,pen1.Brush,15+84*1,375);g.DrawString("第三期",font2,pen1.Brush,15+84*2,375);g.DrawString("第四期",font2,pen1.Brush,15+84*3,375);g.DrawString("上半年",font2,pen1.Brush,15+84*4,375);g.DrawString("下半年",font2,pen1.Brush,15+84*5,375);g.DrawString("全年统计",font2,pen1.Brush,15+84*6,375);//折线图上的数字g.DrawString("39",font2,pen1.Brush,30,370-31-20-15);g.DrawString("111",font2,pen1.Brush,30+84*1,370-(31*4+9)-15);g.DrawString("71",font2,pen1.Brush,30+84*2,370-(31*2+28)-15);g.DrawString("40",font2,pen1.Brush,30+84*3,370-(31*1+20)-15);g.DrawString("150",font2,pen1.Brush,30+84*4,370-(31*5+21)-15);g.DrawString("111",font2,pen1.Brush,30+84*5,370-(31*4+10)-15);g.DrawString("261",font2,pen1.Brush,30+84*6,60-15);g.DrawString("26",font2,pen2.Brush,30,370-(31*1+1)-15);g.DrawString("68",font2,pen2.Brush,30+84*1,370-(31*2+15)-15);g.DrawString("35",font2,pen2.Brush,30+84*2,370-(31*1+10)-15);g.DrawString("14",font2,pen2.Brush,30+84*3,370-(31*0+15)-15);g.DrawString("94",font2,pen2.Brush,30+84*4,370-(31*3+15)-15);g.DrawString("49",font2,pen2.Brush,30+84*5,370-(31*1+29)-15);g.DrawString("143",font2,pen2.Brush,30+84*6,370-(31*5+14)-15);//最下面的矩形框SolidBrushmybrush=newSolidBrush(Color.Red);SolidBrushbrush=newSolidBrush(Color.Green);e.Graphics.DrawRectangle(pen1,30+42*2+30,400,42*7,31*2);e.Graphics.DrawRectangle(pen1,30+42*5,410,21,10);e.Graphics.FillRectangle(mybrush,30+42*5,410,21,10);g.DrawString("报名人数",font2,pen1.Brush,30+42*6,410);e.Graphics.DrawRectangle(pen2,30+42*5,440,21,10);e.Graphics.FillRectangle(brush,30+42*5,440,21,10);g.DrawString("通过人数",font2,pen2.Brush,30+42*6,440);}

感谢各位的阅读!关于“C#如何绘制柱状图和折线图”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!