owc组件如何实现柱状图中横轴每项包含多个数据,比如要显示各年度大、中、小城市的人口增长率.  
弄了好几天了,就是不行,望各位指点。

解决方案 »

  1.   

    www.wave12.com有各种图表图形的示例代码可以参考
      

  2.   

    <OBJECT id="ChartSpace1" classid="clsid:0002E556-0000-0000-C000-000000000046" VIEWASTEXT></OBJECT>         <SCRIPT language="javascript">             //写柱状图             function body_onload()             {                 var arrD=new Array();                 var arrV1=new Array();                 var arrV2=new Array();                 var arrV3=new Array();                                  var sParams="";                 //sParams=Form1.all.drpProduct.value;                                  //----------------------chart1 by area-----------------------------                 /**//*                 var objhttp=new ActiveXObject("Microsoft.XMLHTTP");                 var url="";                 //url="GetXmlData.aspx?spName=sp_query_ui_areamove&valueString=" + sParams;                 //objhttp.open("GET",url,false);                 objhttp.send();                 var sXml=objhttp.responseText;                 */                                  var sXml=Form1.all.hidXML.value;                 window.Form1.hidXML.value='';   //得到值后,把 Hidden 对象清空                 //alert(sXml);                 //return;                 var xmlDoc = new ActiveXObject("Msxml2.DOMDocument");                 var nodeList;                 xmlDoc.async = false;                 xmlDoc.loadXML(sXml);                 nodeList=xmlDoc.documentElement.selectNodes("//Total"); //这里应该写上DataTable的名称,我的DataTable的名称是"Total"                 var nCount=nodeList.length;                                 var sTime="";                 if (nCount>0)                 {                     //sTime=nodeList[0].childNodes[3].text;                     for (var i=0;i<nCount;i++)                     {                         arrD[i]=nodeList[i].childNodes[0].text;                         arrV1[i]=nodeList[i].childNodes[1].text;                         arrV2[i]=nodeList[i].childNodes[2].text;                         arrV3[i]=nodeList[i].childNodes[3].text/100;                     }                 }                                  var myChart=Form1.all.ChartSpace1;                                  myChart.Clear();                                 var a=myChart.Charts.Add(0);   // 就是图对象的实例化                 var c=myChart.Constants;       //                          a.Type=c.chChartTypeColumnClustered;                                  //添加 WO 柱状图                 var cs=a.SeriesCollection.Add(0);                 cs.Caption="WO";                 cs.SetData(c.chDimCategories,c.chDataLiteral,arrD);                 cs.SetData(c.chDimValues,c.chDataLiteral,arrV1);                                              //添加 Yield Feedback Lot 柱状图                 cs=a.SeriesCollection.Add(1);                 cs.Caption="Yield Feedback Lot";                 //cs.SetData(c.chDimCategories,c.chDataLiteral,arrD);                 cs.SetData(c.chDimValues,c.chDataLiteral,arrV2);                                  //添加 Ratio 柱状图                 cs=a.SeriesCollection.Add(2);                 cs.Caption="Ratio";                 cs.SetData(c.chDimCategories,c.chDataLiteral,arrD);                 cs.SetData(c.chDimValues,c.chDataLiteral,arrV3);                 cs.Type=c.chChartTypeLineMarkers;                                  //添加右侧的百分比坐标,其中左侧和下面的坐标默认情况下,已经存在                 cs.Ungroup(true);     //表明是独立的坐标系统,否则将共用左侧坐标                 ax=a.Axes.Add(cs.Scalings(c.chDimValues));                 ax.NumberFormat="0.00%";                 ax.Position=c.chAxisPositionRight;                                  myChart.HasSelectionMarks=true;                 myChart.AllowFiltering=true;                 myChart.AllowPropertyToolbox=true;                                  //定义柱状图的坐标系统的意义                 a.Axes(c.chAxisPositionLeft).HasTitle=true;             //左坐标代表 "Amount" 数量                 a.Axes(c.chAxisPositionLeft).Title.Caption="Amount";                 a.Axes(c.chAxisPositionLeft).Title.Font.Size=8;                 a.Axes(c.chAxisPositionBottom).HasTitle=true;           //下坐标代表 "Product" 名称                 a.Axes(c.chAxisPositionBottom).Title.Caption="Month";                 a.Axes(c.chAxisPositionBottom).Title.Font.Size=8;                 a.Axes(c.chAxisPositionRight).HasTitle=true;            //右坐标代表 "Ratio" 比率                 a.Axes(c.chAxisPositionRight).Title.Caption="Ratio";                 a.Axes(c.chAxisPositionRight).Title.Font.Size=8;                 //a.Axes(c.chAxisPositionRight).MajorUnit=0.1;                     a.HasLegend=true;                 a.Legend.Position=c.chLegendPositionTop;                 //a.HasTitle=true;                 //a.Title.Caption=" Move Report";                 //a.Title.Font.Size=8;                     }                      </SCRIPT> 
      

  3.   

    see My Blog
    两种实现方法
    http://sunnyzhao.cnblogs.com/articles/213302.html
      

  4.   

    http://evget.com/articles/evget_1050.html
    /楼主可以去看看这个啊!
      

  5.   

    //创建ChartSpace对象来放置图表
    Microsoft.Office.Interop.Owc11.ChartSpace objCSpace = new Microsoft.Office.Interop.Owc11.ChartSpaceClass ();  //在ChartSpace对象中添加图表,Add方法返回chart对象
    Microsoft.Office.Interop.Owc11.ChChart objChart = objCSpace.Charts.Add (0); 
    //渐变色 

    objChart.PlotArea.Interior.SetTwoColorGradient(ChartGradientStyleEnum.chGradientDiagonalDown,ChartGradientVariantEnum.chGradientVariantEnd,"LightSkyBlue", "white");  //指定图表的类型。类型由OWC.ChartChartTypeEnum枚举值得到
    objChart.Type = Microsoft.Office.Interop.Owc11.ChartChartTypeEnum.chChartTypeColumnClustered; //指定图表是否需要图例
    objChart.HasLegend = true; //给定标题
    objChart.HasTitle = true;
    objChart.Title.Caption= "上半年分布图"; //给定x,y轴的图示说明
    objChart.Axes[0].HasTitle = true;
    objChart.Axes[0].Title.Caption = "Y : 数量";
    objChart.Axes[1].HasTitle = true;
    objChart.Axes[1].Scaling.Maximum  = 50;
    objChart.Axes[1].Scaling.Minimum  = 0;
    objChart.Axes[1].Title.Caption = "X : 月份";
    //计算数据
    /*categories 和 values 可以用tab分割的字符串来表示*/
    string strSeriesName = "图例 1";
    string strCategory = "1" + "\t" + "2" + '\t' + "3" + '\t'+"4" + '\t' + "5" + '\t' + "6" + '\t';
    string strValue = "9" + "\t" + "8" + '\t' + "4" + '\t'+"10" + '\t' + "12" + '\t' + "6" + '\t'; string strSeriesName2 = "图例 2";
    string strCategory2 = "1" + "\t" + "2" + '\t' + "3" + '\t'+"4" + '\t' + "5" + '\t' + "6" + '\t';
    string strValue2 = "20" + "\t" + "18" + '\t' + "20" + '\t'+"20" + '\t' + "25" + '\t' + "16" + '\t';
    ********************************就是这里,设置多个列***********************
    //添加一个series
    objChart.SeriesCollection.Add(0);
    objChart.SeriesCollection.Add(1);
    ****************************************************************** //给定series的名字
    objChart.SeriesCollection[0].SetData (Microsoft.Office.Interop.Owc11.ChartDimensionsEnum.chDimSeriesNames,
    + (int)Microsoft.Office.Interop.Owc11.ChartSpecialDataSourcesEnum.chDataLiteral, strSeriesName); //给定分类
    objChart.SeriesCollection[0].SetData (Microsoft.Office.Interop.Owc11.ChartDimensionsEnum.chDimCategories,
    + (int)Microsoft.Office.Interop.Owc11.ChartSpecialDataSourcesEnum.chDataLiteral, strCategory); //给定值
    objChart.SeriesCollection[0].SetData
    (Microsoft.Office.Interop.Owc11.ChartDimensionsEnum.chDimValues,
    (int)Microsoft.Office.Interop.Owc11.ChartSpecialDataSourcesEnum.chDataLiteral, strValue);  //给定series的名字
    objChart.SeriesCollection[1].SetData (Microsoft.Office.Interop.Owc11.ChartDimensionsEnum.chDimSeriesNames,
    + (int)Microsoft.Office.Interop.Owc11.ChartSpecialDataSourcesEnum.chDataLiteral, strSeriesName2); //给定分类
    objChart.SeriesCollection[1].SetData (Microsoft.Office.Interop.Owc11.ChartDimensionsEnum.chDimCategories,
    + (int)Microsoft.Office.Interop.Owc11.ChartSpecialDataSourcesEnum.chDataLiteral, strCategory2); //给定值
    objChart.SeriesCollection[1].SetData
    (Microsoft.Office.Interop.Owc11.ChartDimensionsEnum.chDimValues,
    (int)Microsoft.Office.Interop.Owc11.ChartSpecialDataSourcesEnum.chDataLiteral, strValue2); 

    //输出成GIF文件.
    string strAbsolutePath = "c:\\test.gif";
    objCSpace.ExportPicture(strAbsolutePath, "GIF", 500, 300); pictureBox2.Image=Image.FromFile(strAbsolutePath);