C#繪制柱狀圖和折線圖的方法
本文實(shí)例為大家分享了C#繪制柱狀圖和折線圖的具體代碼,供大家參考,具體內(nèi)容如下
運(yùn)行效果如下圖:


設(shè)計(jì)上面的柱狀圖和折線圖其實(shí)并沒有什么難度,主要是各個(gè)坐標(biāo)的計(jì)算,完全是精細(xì)活。首先在窗體在添加了一個(gè)tabControl控件來(lái)切換柱狀圖和折線圖的顯示,在tabPage1中顯示柱狀圖,在tabPage2中顯示折線圖。然后在各自的Page頁(yè)屬性中定義Paint事件,具體實(shí)現(xiàn)過(guò)程可以從下面的代碼中看到。
代碼如下:
添加頭文件:
using System.Drawing.Drawing2D;
tabPage1的Paint事件(畫柱狀圖):
private void tabPage1_Paint(object sender, PaintEventArgs e)
? ? ? ? {
? ? ? ? ? ? BackColor = Color.White;
? ? ? ? ? ? //標(biāo)題
? ? ? ? ? ? Graphics g = tabPage1.CreateGraphics();
? ? ? ? ? ? Font f = new Font("宋體", 24, FontStyle.Regular);
? ? ? ? ? ? Pen p = new Pen(Color.Blue);
? ? ? ? ? ? g.DrawString("報(bào)名及考試統(tǒng)計(jì)柱狀圖", f, p.Brush, 200, 20);
?
? ? ? ? ? ? //畫表格
? ? ? ? ? ? for (int i = 0; i <= 9; i++)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? g.DrawLine(p, 30, 90 + 31 * i, 620, 90 + 31 * i);
? ? ? ? ? ? }
? ? ? ? ? ? for (int i = 1; i <= 14; i++)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? g.DrawLine(p, 30 + 42 * i, 60, 30 + 42 * i, 370);
? ? ? ? ? ? }
?
? ? ? ? ? ? Pen MyPen = new Pen(Color.Blue, 2);
? ? ? ? ? ? Point p1 = new Point(30, 60);
? ? ? ? ? ? Point p2 = new Point(30, 370);
? ? ? ? ? ? Point p3 = new Point(30, 370);
? ? ? ? ? ? Point p4 = new Point(620, 370);
? ? ? ? ? ? g.DrawLine(MyPen, p1, p2);
? ? ? ? ? ? g.DrawLine(MyPen, p3, p4);
?
? ? ? ? ? ? //紅色圖形部分
? ? ? ? ? ? Pen drawPen = new Pen(Color.Red, 1);
? ? ? ? ? ? SolidBrush mybrush = new SolidBrush(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);
?
?
? ? ? ? ? ? //綠色圖形部分
? ? ? ? ? ? Pen drawPen2 = new Pen(Color.Green, 1);
? ? ? ? ? ? SolidBrush brush = new SolidBrush(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);
?
? ? ? ? ? ? //圖上的文字部分
? ? ? ? ? ? Font font2 = new Font("宋體", 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("全年統(tǒng)計(jì)", font2, p.Brush, 30 + 42 * 12 + 21, 375);
?
? ? ? ? ? ? //圖上數(shù)字部分
? ? ? ? ? ? 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);
?
? ? ? ? ? ? //紅色數(shù)
? ? ? ? ? ? Pen pen2 = new Pen(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);
?
?
? ? ? ? ? ? //綠色數(shù)
? ? ? ? ? ? Pen pen3 = new Pen(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("報(bào)名人數(shù)", 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("通過(guò)人數(shù)", font2, pen3.Brush, 30 + 42 * 6, 440);
}tabPage2的Paint事件(畫折線圖):
private void tabPage2_Paint(object sender, PaintEventArgs e)
? ? ? ? {
? ? ? ? ? ? BackColor = Color.White;
? ? ? ? ? ? //標(biāo)題
? ? ? ? ? ? Graphics g = tabPage2.CreateGraphics();
? ? ? ? ? ? Font f = new Font("宋體", 24, FontStyle.Regular);
? ? ? ? ? ? Pen p = new Pen(Color.Blue);
? ? ? ? ? ? g.DrawString("報(bào)名及考試統(tǒng)計(jì)折線圖", f, p.Brush, 200, 20);
?
? ? ? ? ? ? //畫表格
? ? ? ? ? ? for (int i = 0; i <= 9; i++)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? g.DrawLine(p, 30, 90 + 31 * i, 620, 90 + 31 * i);
? ? ? ? ? ? }
? ? ? ? ? ? for (int i = 1; i <= 7; i++)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? g.DrawLine(p, 30 + 84 * i, 60, 30 + 84 * i, 370);
? ? ? ? ? ? }
? ? ? ? ? ? Pen MyPen = new Pen(Color.Blue, 2);
? ? ? ? ? ? Point p1 = new Point(30, 60);
? ? ? ? ? ? Point p2 = new Point(30, 370);
? ? ? ? ? ? Point p3 = new Point(30, 370);
? ? ? ? ? ? Point p4 = new Point(620, 370);
? ? ? ? ? ? g.DrawLine(MyPen, p1, p2);
? ? ? ? ? ? g.DrawLine(MyPen, p3, p4);
?
?
? ? ? ? ? ? //繪制折線
? ? ? ? ? ? Pen pen1 = new Pen(Color.Red, 2);
? ? ? ? ? ? Pen pen2 = new Pen(Color.Green,2);
?
? ? ? ? ? ? //紅色折線
? ? ? ? ? ? Point a1, a2, a3, a4, a5, a6, a7;
? ? ? ? ? ? a1 = new Point(30,370-31-20);
? ? ? ? ? ? a2 = new Point(30+84*1,370-(31*4+9));
? ? ? ? ? ? a3 = new Point(30 + 84 * 2,370-(31*2+28));
? ? ? ? ? ? a4 = new Point(30 + 84 * 3, 370 - (31 * 1 + 20));
? ? ? ? ? ? a5 = new Point(30 + 84 * 4, 370 - (31 * 5 + 21));
? ? ? ? ? ? a6 = new Point(30 + 84 * 5, 370 - (31 * 4 + 10));
? ? ? ? ? ? a7 = new Point(30 + 84 * 6, 60);
? ? ? ? ? ? Point[] points = { a1,a2,a3,a4,a5,a6,a7};
? ? ? ? ? ? g.DrawLines(pen1, points);
?
? ? ? ? ? ? //綠色折線
? ? ? ? ? ? Point b1, b2, b3, b4, b5, b6, b7;
? ? ? ? ? ? b1 = new Point(30,370-(31*1+1));
? ? ? ? ? ? b2 = new Point(30+84*1,370-(31*2+15));
? ? ? ? ? ? b3 = new Point(30 + 84 * 2, 370 - (31 * 1 + 10));
? ? ? ? ? ? b4 = new Point(30 + 84 * 3, 370 - (31 * 0 + 15));
? ? ? ? ? ? b5 = new Point(30 + 84 * 4, 370 - (31 * 3 + 15));
? ? ? ? ? ? b6 = new Point(30 + 84 * 5, 370 - (31 * 1 + 29));
? ? ? ? ? ? b7 = new Point(30 + 84 * 6, 370 - (31 * 5 + 14));
? ? ? ? ? ? Point[] points2 = { b1, b2, b3, b4, b5, b6, b7 };
? ? ? ? ? ? g.DrawLines(pen2,points2);
?
? ? ? ? ? ? //圖上數(shù)字部分
? ? ? ? ? ? Font font2 = new Font("宋體", 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("全年統(tǒng)計(jì)", font2, pen1.Brush, 15 + 84 * 6, 375);
?
?
? ? ? ? ? ? //折線圖上的數(shù)字
? ? ? ? ? ? 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);
? ? ? ? ? ? //最下面的矩形框
?
? ? ? ? ? ? SolidBrush mybrush = new SolidBrush(Color.Red);
? ? ? ? ? ? SolidBrush brush = new SolidBrush(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("報(bào)名人數(shù)", 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("通過(guò)人數(shù)", font2, pen2.Brush, 30 + 42 * 6, 440);
}以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Winform控件Picture實(shí)現(xiàn)圖片拖拽顯示效果
這篇文章主要為大家詳細(xì)介紹了Winform控件Picture實(shí)現(xiàn)圖片拖拽顯示效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-09-09
C# WinForm 登錄界面的圖片驗(yàn)證碼(區(qū)分大小寫+不區(qū)分大小寫)
這篇文章主要介紹了C# WinForm 登錄界面的圖片驗(yàn)證碼(區(qū)分大小寫+不區(qū)分大小寫),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02
C#基于Socket實(shí)現(xiàn)簡(jiǎn)單聊天室功能
這篇文章主要為大家詳細(xì)介紹了C#基于Socket實(shí)現(xiàn)簡(jiǎn)單聊天室功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02
MessageBox的Buttons和三級(jí)聯(lián)動(dòng)效果
這篇文章主要介紹了MessageBox的Buttons和三級(jí)聯(lián)動(dòng)的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-11-11

