using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Drawing;
using ZedGraph;
using ZedGraph.Web;

namespace HINDI.Web.Report
{
    public partial class LineChart : System.Web.UI.Page
    {
        private string zPath = System.Configuration.ConfigurationManager.AppSettings["ZedPath"];
       
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                this.ZedGraphDemo();
            }
        }

       #region Web 窗体设计器生成的代码
    override protected void OnInit(EventArgs e)
    {
        //
        // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
        //
        InitializeComponent();
        base.OnInit(e);
    }

    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {
        this.Load += new System.EventHandler(this.Page_Load);
        this.ZedGraphWeb1.RenderGraph += new ZedGraphWebControlEventHandler(this.OnRenderGraph);
    }
    #endregion

        #region ZedGraph生成折线图
        private void ZedGraphDemo()
        {
            //设置图表保存文件夹
            this.zgwLine.RenderedImagePath = zPath;
        }

        ///


        /// ZedGraph折线图演示
        ///
        /// 封装的一个GDI+绘图图面
        /// ZedGraph.MasterPane:绘图面板
        private void OnRenderGraph(ZedGraphWeb zgw, Graphics g, MasterPane masterPane)
        {
            ZedGraph.GraphPane myPane = masterPane[0];

            //主题
            myPane.Title.Text = "指标数据报表";
            //主题字体颜色
            myPane.Title.FontSpec.FontColor = Color.Red;
            //主题字体大小
            myPane.Title.FontSpec.Size = 20;
            //横纵坐标的标题
            string [] subject = new string[]{"月份","数据值"};
            //月份数组
            string [] months = new string[] { "一", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一", "十二" };
            //月份对应值
            double[] datas = new double[] { 1.5,2.1,1.5,1.8,1.7,1.9,5.9,4.3,1.7,1.8,1.1,1.9};
            //数据点集合(包含横纵坐标点)
            PointPairList list = new PointPairList();
            for (int i = 0; i < months.Length; i++)
            {
                //横坐标点
                double x = Convert.ToDouble(i);
                //纵坐标点
                double y = datas[i];
                //添加到集合中
                list.Add(x,y);
            }
            //设置横坐标的标题
            myPane.XAxis.Title.Text = subject[0];
            //设置纵坐标的标题
            myPane.YAxis.Title.Text = subject[1];

            //设置横坐标的类型为文本
            myPane.XAxis.Type = AxisType.Text;
            //设置横坐标的开始的最小值
            myPane.XAxis.Scale.Min = 0;
            //设置横坐标的结束的最大值
            myPane.XAxis.Scale.Max = 13;
            //设置横坐标要显示的文本
            myPane.XAxis.Scale.TextLabels = months;
            //设置横坐标的字体大小
            myPane.XAxis.Scale.FontSpec.Size = 8;
            //设置纵坐标的字体大小
            myPane.YAxis.Scale.FontSpec.Size = 10;
            //设置横坐标的文本为可见的(默认可见)
            //myPane.XAxis.Scale.IsVisible = true;
            //将横纵坐标点添加到面板中,并设置名称,值,颜色,点的形状
            LineItem curve = myPane.AddCurve("实际值", list, Color.Red, SymbolType.Circle);
            //设置各点的连线宽度
            curve.Line.Width = 1.0F;
            //设置点的填充颜色
            curve.Symbol.Fill = new Fill(Color.White);
            //设置点的大小
            curve.Symbol.Size = 5;
            //设置连接线的抗锯齿效果
            curve.Line.IsAntiAlias = true;
            //设置图形的填充颜色(渐变效果,及渐变的角度)
            myPane.Chart.Fill = new Fill(Color.White,Color.SteelBlue,45.0F);
            myPane.AxisChange(g);
            //绘制图片
            myPane.Draw(g);
        }
        #endregion
    }
}

ZedGraph的一些参数说明
ZedGraph
来源:http://sourceforge.net/project/showfiles.php?group_id=114675
ZedGraph相关例子资源:http://zedgraph.org/wiki/index.php?title=Sample_Graphs
几个注意点:
图片的保存路径设置:RenderedImagePath属性中设置,程序对该文件夹应该是有写和修改权限的
图片的输出格式:OutputFormat属性中设置,Png的推荐,比较清晰。
Chart
      ChartBorder                      图表区域的边框设置
      ChartFill                            图表区域的背景填充
      Legend                             图表的注释标签显示设置项目,一组数据对应一种颜色的注释
           IsHStack                     当有多个显示项的时候设置Y轴数据是叠加的还是分开的
      Xaxis                                图表区域的X轴相关信息设置
           AxisColor                    坐标轴颜色
           Cross                         坐标的原点,可以设置坐标的偏移程度
           CrossAuto                   原点自动设置:True的话Cross的设置就无效了。
           FontSpec                    X轴标题字体相关信息
                 Angle                    X轴标题字体显示时候的角度,0为水平 90为垂直
                 Fill                         X轴标题字体填充信息
                      ColorOpacity     透明度
                      IsScaled           设置X轴标题字体显示大小是否根据图的比例放大缩小
                      RangeMax        填充时候的最大倾斜度(有过渡色,没试过)
                      RangeMin         填充时候的最小倾斜度(有过渡色,没试过)
                 StringAlignment     X轴标题字体排列(不清楚,没试过)
           IsOmitMag                   是否显示指数幂(10次方,没试过,似乎与IsUseTenPower有关系)
           IsPreventLabelOverlap   坐标值显示是否允许重叠,如果False的话,控件会根据坐标值长度自动消除部分坐标值的显示状态
           IsShowTitle                 X轴标题是否显示
           IsTicsBetweenLabels     两个坐标值之间是否自动显示分隔标志
           IsUseTenPower             是否使用10次幂指数
           IsVisible                      是否显示X轴
           IsZeroLine                   当数据为0时候是否显示(在饼状图显示的时候有用)
           MajorGrid                    大跨度的X轴表格虚线线显示信息
                 DashOff                 虚线中孔间距
                 DashOn                      虚线单位长度
           MajorTic                      大跨度的X轴刻度信息
                 IsInside                 在Chart内部是否显示
                 IsOutSide              在Chart外部是否显示
                 IsOpposite             在对面的轴上是否显示
           MinorGrid                    小跨度的X轴表格虚线显示信息
           MinorTic                      小跨度的x轴刻度信息
           MinSpace                     刻度和轴之间的距离(没试过)
           Scale                          刻度值的一些设定
                 IsReverse              X轴的刻度值从高到低还是从低到高
                 MajorStep              大刻度步长
                 MajorStepAuto       是否自动设置大刻度步长
                 MajorUnit               大刻度步长单位
                 Max                      刻度最大值
                 MaxAuto                根据输入数据自动设置刻度最大值
                 Min                       刻度最小值
                 MinAuto                 根据输入数据自动设置刻度最小值
                 MinGrace               不清楚,没试过
                 MinorStep              小刻度步长
                 MinorStepAuto       是否自动设置小刻度步长
                 MinorUnit               小刻度单位
           Type                           数据显示方式
                                             Liner直接现实(自动)
                                             Date按日期方式显示
                                             Log 按指数幂方式显示
                                             Ordinal顺序显示
      Y2Axis                              第二个Y轴坐标信息显示(具体设置看X轴)
      Yaxis                                第一个Y轴坐标信息显示(具体设置看X轴)
GraphPane
      BarBase                            在生成柱状图的时候设置柱状是基于X轴还是其他轴
      BarType                            柱状的类型叠加或其他。
      IsFontsScaled                    图比例变化时候图表上的文字是否跟着自动缩放
      IsIgnoreInitial                    是否忽略初始值
      IsIgnoreMissing                 是否忽略缺省值
      IsPenWidthScaled              图比例变化时候图表上的画笔的粗细是否跟着自动缩放
      IsShowTitle                       图表标题是否显示
      PaneFill                             Pane的一些填充信息
MasterPane
      BaseDimension                  缩放比例基数(可以试试效果)
     
数据                                       未测试过。不知道如何和数据库绑定
外观                
      IsImageMap                      不清楚干吗用的
行为
      AxisChaneged                   是否允许自动绘图(没试过,一般都true,动态绘图)
      CacheDuration                   Cache保存时间0
      OutputFormat                   输出格式
      RenderedImagePath           输出路径
      RenderMode                      输出模式,不太清楚一般都是ImageTag,另一个输出的是乱码不是图片
对于图表而言,一般是三种表现形式:柱状图、饼状图和点线图。

newv.graph.GraphPane myPane = new GraphPane();
            //定义绘制图表的大小
           
            // 设置图表的说明文字
            myPane.Title = "直方图";
            // 设置横坐标的说明文字
            myPane.XAxis.Title = "答题";
            // 设置纵坐标的说明文字
            myPane.YAxis.Title = "人数";

            //设置基于X轴排列柱状图
            myPane.BarBase = BarBase.X;
            //y轴刻度显示为文本类型
            myPane.XAxis.Type = AxisType.Text;

            string[] machine ={ "赌东道大幅度的赌东道", "赌东道大幅度的赌东道-40", "赌东道大幅度的赌东道0-60", "赌东道大幅度的赌东道-70", "赌东道大幅度的赌东道0-80", "赌东道大幅度的赌东道0-90" };
            double[] efficiency ={ 22, 13, 89, 19, 56, 7 };
            double minNum = 0;
            double maxNum = 0;
            PointPairList lineList = new PointPairList();
            PointPairList lineList2 = new PointPairList();
            double x = 0;
            double y = 0;
            int a = 2;
            int b = 89;
          
            for (int i = 0; i < machine.Length; i++)
            {
                if (maxNum < efficiency[i])
                    maxNum = efficiency[i];
                if (i == 0) minNum = efficiency[i];
                else
                {
                    if (minNum > efficiency[i])
                        minNum = efficiency[i];
                }
                x = i;
                y = efficiency[i];
                lineList.Add(x, y);
                if (i == a)
                    lineList2.Add(a, b);
                else
                    lineList2.Add(0, 0);
            }
            maxNum = maxNum + 10;
            if (minNum / 10 > 1) minNum = (Math.Ceiling(minNum / 10) - 1) * 10;
            else minNum = 0;

            //设置X轴显示“柱子”的起始和终止位置
            myPane.XAxis.Max = 7;
            myPane.XAxis.Min = 0;
            myPane.YAxis.Min = minNum;
            myPane.YAxis.Max = maxNum;

            myPane.XAxis.TextLabels = machine;
            myPane.XAxis.StepAuto = false;
           
            myPane.XAxis.ScaleFontSpec.Angle=-70;
            //BarItem myCurve = myPane.AddBar("", null, efficiency, Color.Green);
            LineItem myCurve = myPane.AddCurve("曲线", lineList, Color.Blue, SymbolType.Circle);
            myCurve.Line.IsSmooth = true;
            LineItem myCurve2 = myPane.AddCurve("", lineList2, Color.Red, SymbolType.Circle);
            myCurve2.Line.IsVisible=false;
            myPane.FontSpec.Angle = 90;
            //BarItem myCurve3 = myPane.AddCurve((.AddBar("", Convert.ToDouble(3),Convert.ToDouble(89), Color.Red);
            //System.Drawing.Graphics g=myPane.;
            // 在数据变化时绘制图形
            myPane.AxisChange(Graphics.FromImage(myPane.Image));
            //myPane.AxisChange(g);
     
            //zgc.AxisChange();
            string graphPath = "C:/Documents and Settings/Administrator/My Documents/Visual Studio 2005/Projects/WindowsApplication1/WindowsApplication1/filePath/" + "AnalysisGraph.bmp";
           
            myPane.Image.Save(graphPath,System.Drawing.Imaging.ImageFormat.Png);