柱状统计图

sql语句:

create database DBTest
go
use DBTest
go
create table VisiteCount
(
    id int identity(1,1) primary key not null,--自增列
    loginTime Datetime --访问时间
)

insert into VisiteCount values('2013-01-01');
insert into VisiteCount values('2013-02-01');
insert into VisiteCount values('2013-02-02');
insert into VisiteCount values('2013-03-01');
insert into VisiteCount values('2013-03-02');
insert into VisiteCount values('2013-03-03');
insert into VisiteCount values('2013-04-01');
insert into VisiteCount values('2013-04-02');
insert into VisiteCount values('2013-04-03');
insert into VisiteCount values('2013-04-04');
insert into VisiteCount values('2013-05-01');
insert into VisiteCount values('2013-05-02');
insert into VisiteCount values('2013-05-03');
insert into VisiteCount values('2013-05-04');
insert into VisiteCount values('2013-05-05');
insert into VisiteCount values('2013-06-01');
insert into VisiteCount values('2013-06-02');
insert into VisiteCount values('2013-06-03');
insert into VisiteCount values('2013-06-04');
insert into VisiteCount values('2013-06-05');
insert into VisiteCount values('2013-06-06');
insert into VisiteCount values('2013-07-01');
insert into VisiteCount values('2013-07-02');
insert into VisiteCount values('2013-07-03');
insert into VisiteCount values('2013-07-04');
insert into VisiteCount values('2013-07-05');
insert into VisiteCount values('2013-07-06');
insert into VisiteCount values('2013-07-07');
insert into VisiteCount values('2013-08-01');
insert into VisiteCount values('2013-08-02');
insert into VisiteCount values('2013-08-03');
insert into VisiteCount values('2013-08-04');
insert into VisiteCount values('2013-08-05');
insert into VisiteCount values('2013-08-06');
insert into VisiteCount values('2013-08-07');
insert into VisiteCount values('2013-08-08');
insert into VisiteCount values('2013-09-01');
insert into VisiteCount values('2013-09-02');
insert into VisiteCount values('2013-09-03');
insert into VisiteCount values('2013-09-04');
insert into VisiteCount values('2013-09-05');
insert into VisiteCount values('2013-09-06');
insert into VisiteCount values('2013-09-07');
insert into VisiteCount values('2013-09-08');
insert into VisiteCount values('2013-09-09');
insert into VisiteCount values('2013-10-01');
insert into VisiteCount values('2013-10-02');
insert into VisiteCount values('2013-10-03');
insert into VisiteCount values('2013-10-04');
insert into VisiteCount values('2013-10-05');
insert into VisiteCount values('2013-10-06');
insert into VisiteCount values('2013-10-07');
insert into VisiteCount values('2013-10-08');
insert into VisiteCount values('2013-10-09');
insert into VisiteCount values('2013-10-10');
insert into VisiteCount values('2013-11-01');
insert into VisiteCount values('2013-11-02');
insert into VisiteCount values('2013-11-03');
insert into VisiteCount values('2013-11-04');
insert into VisiteCount values('2013-11-05');
insert into VisiteCount values('2013-11-06');
insert into VisiteCount values('2013-11-07');
insert into VisiteCount values('2013-11-08');
insert into VisiteCount values('2013-11-09');
insert into VisiteCount values('2013-11-10');
insert into VisiteCount values('2013-11-11');
insert into VisiteCount values('2013-12-01');
insert into VisiteCount values('2013-12-02');
insert into VisiteCount values('2013-12-03');
insert into VisiteCount values('2013-12-04');
insert into VisiteCount values('2013-12-05');
insert into VisiteCount values('2013-12-06');
insert into VisiteCount values('2013-12-07');
insert into VisiteCount values('2013-12-08');
insert into VisiteCount values('2013-12-09');
insert into VisiteCount values('2013-12-10');
insert into VisiteCount values('2013-12-11');
insert into VisiteCount values('2013-12-12');
View Code

cs代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Configuration;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Data;

public partial class VisiteCount : System.Web.UI.Page
{
    public string connStr = ConfigurationManager.ConnectionStrings["VisitCountConnectionString"].ToString();
    protected void Page_Load(object sender, EventArgs e)
    {
        DrawLinearGradient();
    }

    //访问人数统计
    public int Total()
    {
        int result = -1;
        string sql = "select count(1) from VisiteCount";
        SqlConnection conn = new SqlConnection(connStr);
        conn.Open();
        SqlCommand cmd = new SqlCommand(sql, conn);
        result =Convert.ToInt32(cmd.ExecuteScalar());
        cmd.Dispose();
        conn.Close();
        return result;
    }

    //柱形图
    public void DrawLinearGradient()
    {
        int height = 400, width = 600;//定义画布长宽
        /*新建一个画布*/
        Bitmap image = new Bitmap(width, height); 
        //Graphics GDI+绘图的表面。即绘图的一个平台。
        Graphics g = Graphics.FromImage(image);

        /*绘制背景墙、网格线以及坐标*/
        g.Clear(Color.White);//清空背景
        //创建字体对象
        Font font = new Font("Arial",9,FontStyle.Regular);
        Font font1 = new Font("宋体",20,FontStyle.Bold);
        //创建一个矩形
        Rectangle rectangle = new Rectangle(0, 0, image.Width, image.Height);
        //创建一个线性渐变画笔。
        LinearGradientBrush brush = new LinearGradientBrush(rectangle, Color.Blue, Color.BlueViolet, 1.2f, true);
        //调用Graphics对象的FileRectangle方法在画布中绘制一个使用渐变图案填充的矩形。
        g.FillRectangle(Brushes.WhiteSmoke, 0, 0, width, height);
        g.DrawString("2013年各月份网站流量统计", font1, brush, new PointF(130, 30));

        /*画图片的边框线*/
        //绘制由坐标对、宽度和高度指定的矩形。
        g.DrawRectangle(new Pen(Color.Blue), 0, 0, image.Width - 1, image.Height - 1);
        
        /*绘制线条*/
        //绘制纵向线条
        int x = 100;
        Pen mypen = new Pen(brush,1); //用于绘制直线和曲线对象
        for (int i = 0; i < 11; i++)
        {
            g.DrawLine(mypen, x, 80, x, 340);
            x = x + 40;
        }
        Pen mypen1 = new Pen(Color.Blue, 2);
        g.DrawLine(mypen1, x - 480, 80, x - 480, 340);
        //绘制横向线条
        int y = 106;
        for (int i = 0; i < 9; i++)
        {
            g.DrawLine(mypen, 60, y, 540, y);
            y = y + 26;
        }
        g.DrawLine(mypen1, 60, y, 540, y);

        /*为已经绘制的坐标轴绘制数据标记。X轴显示月份,y轴显示百分比刻度*/
        //X轴
        string[] n = {"一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"};
        x = 62;
        for (int i = 0; i < 12; i++)
        {
            g.DrawString(n[i].ToString(), font, Brushes.Black, x, 380);
            x = x + 40;
        }
        //y轴
        string[] m = {"100%","90%","80%","70%","60%","50%","40%","30%","20%","10%","0%"};
        y = 85;
        for (int i = 0; i < 11; i++)
        {
            g.DrawString(m[i].ToString(),font,Brushes.Black,25,y);//设置文字内容以及输出位置
            y = y + 25;
        }
        //将检索出的数据按一定比例绘制到图像中
        int[] count = new int[12];
        string sql = "";
        SqlConnection conn = new SqlConnection(connStr);
        conn.Open();
        SqlDataAdapter da;
        DataSet ds = new DataSet();
        for (int i = 0; i < 12; i++)
        {
            sql = @"select count(1) as count,Month(loginTime) as month from VisiteCount where YEAR(loginTime)=2013 and MONTH(loginTime)=" + (i + 1) + " group by MONTH(loginTime)";
            da = new SqlDataAdapter(sql, conn);
            da.Fill(ds, i.ToString());
            if (ds.Tables[i].Rows.Count == 0)
            {
                count[i] = 0;
            }
            else
            {
                //count[i] = Convert.ToInt32(ds.Tables[i].Rows[0][0].ToString())*100/Total();
                count[i] = Convert.ToInt32(ds.Tables[i].Rows[0][0].ToString());
            }
        }

        //显示柱状效果图
        x = 70;
        for (int i = 0; i < 12; i++)
        {
            //g.DrawString(count[i], font, Brushes.Red, x-5, 320 - count[i] * 26 / 10);
            string dble = (Convert.ToDouble(count[i])/Total()*100).ToString().Substring(0,4);
            g.DrawString(dble.ToString()+"%", font, Brushes.Red, x-5, 320 - (count[i]*100/Total()) * 26 / 10);
            SolidBrush mybrash = new SolidBrush(Color.Blue);
            g.FillRectangle(mybrash, x, 340 - (count[i] * 100 / Total()) * 26 / 10, 20, (count[i] * 100 / Total()) * 26 / 10);
            x = x+40;
        }

        //将绘制好的助兴图标显示在页面上
        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
原文地址:https://www.cnblogs.com/Jokers/p/3520319.html