C# 绘制统计图(柱状图, 折线图, 扇形图)

统计图形种类繁多, 有柱状图, 折线图, 扇形图等等, 而统计图形的绘制方法也有很多, 有Flash制作的统计图形, 有水晶报表生成统计图形, 有专门制图软件制作, 也有编程语言自己制作的;这里我们用就C# 制作三款最经典的统计图: 柱状图, 折线图和扇形图;既然是统计, 当然需要数据, 这里演示的数据存于Sql Server2000中, 三款统计图形都是动态生成. 其中柱状图我会附上制作步骤, 其他两款统计图直接附源码.

 

说明: 需求不一样, 统计图形绘制后的显示效果也不一样, 比如这里柱状图的主要需求是为了比较每一期报名人数与通过人数的差, 因此会把两根柱子放在一起会使比较结果一目了然. 因此大家可以根据需要灵活绘制.

  

一. 柱状图的绘制.

绘制步骤如下:

1. 定义绘图用到的类.

int height = 500, width = 700;
Bitmap image = new Bitmap(width, height);
Graphics g = Graphics.FromImage(image);
Pen mypen = new Pen(brush, 1);

 

2. 绘制图框.

g.FillRectangle(Brushes.WhiteSmoke, 0, 0, width, height);

 

3. 绘制横向坐标线

for (int i = 0; i < 14; i++) 
{
g.DrawLine(mypen, x, 80, x, 340);
x = x + 40;
}

 

4. 绘制纵向坐标线

for (int i = 0; i < 9; i++) 
{
g.DrawLine(mypen, 60, y, 620, y);
y = y + 26;
}

 

5. 绘制横坐标值

复制代码

String[] n = { "第一期", "第二期", "第三期", "第四期", "全年" };
for (int i = 0; i < 7; i++) 
{
g.DrawString(n[i].ToString(), font, Brushes.Blue, x, 348); 
x = x + 78;
}

复制代码

 

6. 绘制纵坐标值

复制代码

String[] m = {"250","225", "200", "175", "150", "125", "100“};
for (int i = 0; i < 10; i++) 
{
g.DrawString(m[i].ToString(), font, Brushes.Blue, 25, y);
y = y + 26;
}

复制代码

 

7. 定义数组存储数据库中统计的数据

int[] Count1 = new int[7]; //存储从数据库读取的报名人数
int[] Count2 = new int[7]; //存储从数据库读取的通过人数

 

8. 从数据库中读取报名人数与通过人数

复制代码

SqlConnection Con = new SqlConnection(
"Server=(Local);Database=committeeTraining;");
Con.Open();
string cmdtxt2 = "SELECT * FROM ##Count 
where Company='" + ****+ "'";
SqlDataAdapter da = new SqlDataAdapter(cmdtxt2, Con);
DataSet ds = new DataSet();
da.Fill(ds);

复制代码

 

9. 将读取的数据存储到数组中

Count1[0] = Convert.ToInt32(ds.Tables[0].Rows[0][“count1”].ToString()); 
Count1[1] = Convert.ToInt32(ds.Tables[0].Rows[0][“count3”].ToString()); 
Count2[0] = Convert.ToInt32(ds.Tables[0].Rows[0][“count2”].ToString()); 
Count2[1] = Convert.ToInt32(ds.Tables[0].Rows[0]["count4"].ToString());

 

10.定义画笔和画刷准备绘图

x = 80; 
Font font2 = new System.Drawing.Font(
"Arial", 10, FontStyle.Bold);
SolidBrush mybrush = new SolidBrush(Color.Red);
SolidBrush mybrush2 = new SolidBrush(Color.Green);

 

11. 根据数组中的值绘制柱状图

复制代码

(1)第一期报名人数
g.FillRectangle(mybrush, x, 340 - Count1[0], 20, Count1[0]);
g.DrawString(Count1[0].ToString(), font2, 
Brushes.Red, x, 340 - Count1[0] - 15);

(2) 第一期通过人数
x = x + 20;
g.FillRectangle(mybrush2, x, 340 - Count2[0], 20, Count2[0]);
g.DrawString(Count2[0].ToString(), font2, 
Brushes.Green, x, 340 - Count2[0] - 15);

复制代码

 

12. 将图形输出到页面.

复制代码

System.IO.MemoryStream ms = new 
System.IO.MemoryStream();
image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
Response.ClearContent();
Response.ContentType = "image/Jpeg";
Response.BinaryWrite(ms.ToArray()); 

复制代码

 

最终柱状图的效果图:

 

柱状图的完整代码:

View Code

 

二. 折线统计图的绘制

效果:

 

 

 

 

折线图的完整代码:

View Code

 

三. 扇形统计图的绘制

效果图:

 

 

扇形图完整代码:

View Code

 

 这里的统计图直接输出到网页, 如果大家需要制作 winForm 上需要显示的统计图。可参考我之前写的:

C#制作艺术字

C#完成超酷的图像效果 (附demo)

出处:http://www.cnblogs.com/ziyiFly/archive/2008/09/24/1297841.html

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值