C#如何绘制柱状图和折线图
发表于:2025-11-06 作者:千家信息网编辑
千家信息网最后更新 2025年11月06日,这篇文章给大家分享的是有关C#如何绘制柱状图和折线图的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。具体内容如下运行效果如下图:设计上面的柱状图和折线图其实并没有什么难度,主
千家信息网最后更新 2025年11月06日C#如何绘制柱状图和折线图
这篇文章给大家分享的是有关C#如何绘制柱状图和折线图的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
具体内容如下
运行效果如下图:
设计上面的柱状图和折线图其实并没有什么难度,主要是各个坐标的计算,完全是精细活。首先在窗体在添加了一个tabControl控件来切换柱状图和折线图的显示,在tabPage1中显示柱状图,在tabPage2中显示折线图。然后在各自的Page页属性中定义Paint事件,具体实现过程可以从下面的代码中看到。
代码如下:
添加头文件:
using System.Drawing.Drawing2D;
tabPage1的Paint事件(画柱状图):
private void tabPage1_Paint(object sender, PaintEventArgs e) { BackColor = Color.White; //标题 Graphics g = tabPage1.CreateGraphics(); Font f = new Font("宋体", 24, FontStyle.Regular); Pen p = new Pen(Color.Blue); g.DrawString("报名及考试统计柱状图", 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("全年统计", 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); //红色数 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); //绿色数 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("报名人数", 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事件(画折线图):
private void tabPage2_Paint(object sender, PaintEventArgs e) { BackColor = Color.White; //标题 Graphics g = tabPage2.CreateGraphics(); Font f = new Font("宋体", 24, FontStyle.Regular); Pen p = new Pen(Color.Blue); g.DrawString("报名及考试统计折线图", 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); //图上数字部分 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("全年统计", 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); //最下面的矩形框 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("报名人数", 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#如何绘制柱状图和折线图"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
线图
柱状
部分
人数
宋体
面的
统计
事件
内容
折线
数字
红色
绿色
C#
代码
全年
图形
文字
更多
标题
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络技术与网络管理
数据库端口不允许访问
海南家用软件开发单价
跑腿app软件开发
可信溯源网络技术
我的世界服务器一个月要多少元
文档是软件开发与软件管理
资源型服务器
u盘如何当数据库
网络技术发展阶段包括哪几个
网吧服务器和硬盘哪个好用
服务器引导管理器
政府网络安全分析报告
博雅数据库南京航空航天大学
计算机网络技术好考研
互联网科技与艺术的关系
皮城警备服务器在哪
我区网络安全宣传
软件开发工作量确认表
承德软件开发要多少钱
食谱视频软件开发
学网络安全技术怎么样
关于网络安全的新闻人民网
互联网加科技的作文
台前软件开发
远程服务器代码
广东标准软件开发费用
舆情与网络安全
深圳市智度互联网科技公司
数据库中为什么要做日期转化