在.Net里用OWC11画统计图

来源:互联网 发布:python编程用什么软件 编辑:程序博客网 时间:2024/05/08 08:35

  /// <summary>
  /// 画统计图,可以支持多种统计图
  /// </summary>
  /// <param name="ccte">画图类型:折线,柱状图等</param>
  /// <param name="Title">标题</param>
  /// <param name="XTitle">X标题</param>
  /// <param name="YTitle">Y标题</param>
  /// <param name="SeriesName">图例说明文字</param>
  /// <param name="XArray">X坐标说明</param>
  /// <param name="Value">Y坐标说明</param>
  /// <param name="Width">图宽</param>
  /// <param name="Height">图高</param>
  /// <param name="PicDesc">图名称</param>
  /// <param name="ShowNum">是否显示值</param>
  /// <returns></returns>
  public string Chart(OWC11.ChartChartTypeEnum ccte,string Title,string XTitle,string YTitle,string[] SeriesName,string[] XArray,string[][] Value,int Width,int Height,string PicDesc,bool[] ShowNum)
  {
   if(Value.Length!=SeriesName.Length|| ShowNum.Length!=SeriesName.Length)
   {
                throw new ArgumentException("Invalid param");
   }
   
   OWC11.ChartSpace objCSpace = new OWC11.ChartSpaceClass ();

   //在ChartSpace对象中添加图表,Add方法返回chart对象
   OWC11.ChChart objChart = objCSpace.Charts.Add (0);
   
   //指定图表的类型。类型由OWC.ChartChartTypeEnum枚举值得到
   objChart.Type = ccte;//OWC11.ChartChartTypeEnum.chChartTypeBarClustered;//.chChartTypeBarClustered3D;//..chChartTypeLine;
   
 
   //指定图表是否需要图例
   objChart.HasLegend = true;
   //objChart.Legend.Position=OWC11.ChartLegendPositionEnum.chLegendPositionLeft;

   //给定标题
   objChart.HasTitle = true;
   objChart.Title.Caption= Title;
   objChart.Title.Font.Bold=true;
   objChart.Title.Font.Size=10;
   objChart.Title.Font.Color="Maroon";

   //给定x,y轴的图示说明
   objChart.Axes[0].HasTitle = true;
   objChart.Axes[0].Title.Caption = XTitle;
   objChart.Axes[1].HasTitle = true;
   //objChart.Axes[1].Scaling.SplitMinimum  = 200;
   objChart.Axes[1].Title.Caption = YTitle;

   //计算数据
   /*categories 和 values 可以用tab分割的字符串来表示*/
   string strCategory="";
   string strValue="";
   
  
   for(int i=0;i<XArray.Length;i++)
   {
    strCategory+=XArray[i].ToString()+"/t";
    
   }
   
   int lenS=SeriesName.Length;
   for(int i=0;i<lenS;i++)
   {
    for(int j=0;j<Value[i].Length;j++)
    {
                    strValue+=Value[i][j]+"/t";       
    }
    //添加series
    objChart.SeriesCollection.Add(i);
    switch(SeriesName[i].Trim())
    {
     case "月":
      objChart.SeriesCollection[i].Line.Color="green"; 
      objChart.SeriesCollection[i].Interior.Color="green";
      objChart.SeriesCollection[i].Marker.Size=0;
      break;
     case "次":
      objChart.SeriesCollection[i].Line.Color="yellow";
      objChart.SeriesCollection[i].Interior.Color="yellow";      
      objChart.SeriesCollection[i].Marker.Size=0;      
      break;
     case "天":       
      objChart.SeriesCollection[i].Line.Color="BlueViolet";  
      objChart.SeriesCollection[i].Interior.Color="BlueViolet";  
      objChart.SeriesCollection[i].Marker.Size=0;      
      break;
     case "U":   
      objChart.SeriesCollection[i].Line.Color="black";
      objChart.SeriesCollection[i].Interior.Color="black";      
      objChart.SeriesCollection[i].Marker.Size=0;
      break;
     case "推":   
      objChart.SeriesCollection[i].Line.Color="purple";
      objChart.SeriesCollection[i].Interior.Color="purple";      
      objChart.SeriesCollection[i].Marker.Size=0;
      break;
     case "总":        
      objChart.SeriesCollection[i].Line.Color="blue";
      objChart.SeriesCollection[i].Interior.Color="blue"; 
      objChart.SeriesCollection[i].Marker.Style=OWC11.ChartMarkerStyleEnum.chMarkerStyleCircle;
      break;
     case "警": 
      //objChart.SeriesCollection[i].Type=OWC11.ChartChartTypeEnum.chChartTypeLine;
      objChart.SeriesCollection[i].Line.Color="red";
      objChart.SeriesCollection[i].Interior.Color="red";
      objChart.SeriesCollection[i].Line.DashStyle=OWC11.ChartLineDashStyleEnum.chLineDashDot;
      objChart.SeriesCollection[i].Marker.Size=0;
      break;
     default:           
      break; 
    }

    
    //给定series的名字
    objChart.SeriesCollection[i].SetData (OWC11.ChartDimensionsEnum.chDimSeriesNames,
     + (int)OWC11.ChartSpecialDataSourcesEnum.chDataLiteral, SeriesName[i]);
   

    //给定分类
    objChart.SeriesCollection[i].SetData (OWC11.ChartDimensionsEnum.chDimCategories,
     + (int)OWC11.ChartSpecialDataSourcesEnum.chDataLiteral, strCategory);

    //给定值
    objChart.SeriesCollection[i].SetData
     (OWC11.ChartDimensionsEnum.chDimValues,
     (int)OWC11.ChartSpecialDataSourcesEnum.chDataLiteral, strValue);

    if(ShowNum[i])
    {
     //设置是否显示数值
     objChart.SeriesCollection[i].DataLabelsCollection.Add();
     objChart.SeriesCollection[i].DataLabelsCollection[0].HasValue = true;
     objChart.SeriesCollection[i].DataLabelsCollection[0].Font.Color="Maroon";
    }             
 
    strValue="";
   }

   string strAbsolutePath = (System.Configuration.ConfigurationSettings.AppSettings["SSP.Path"].ToString())+PicDesc+".gif";
   objCSpace.ExportPicture(strAbsolutePath, "GIF", Width, Height);
   
   return System.Configuration.ConfigurationSettings.AppSettings["SSP.DNS"].ToString()+PicDesc+".gif"+"?rnd="+System.Guid.NewGuid().ToString();

  }