现在的位置: 首页 > 综合 > 正文

如何用owc(office web component)画图表

2013年09月13日 ⁄ 综合 ⁄ 共 9341字 ⁄ 字号 评论关闭

前段时间公司要用owc做图表,就研究了一下,发现这方面的资料很少,就贴个代码出来大家研究研究。

public partial class frmChartShow : Form
    {
        
public frmChartShow()
        {
            InitializeComponent();
        }
        
private void frmChartShow_Load(object sender, EventArgs e)
        {
            
string[] X1 = { "0""5""10""15""20""25""30" };
            
string[] Y1 = { "1""2.5""3""10""15""16""17" };
            
string[] X2 = { "0""5""10""15""20""25""30" };
            
string[] Y2 ="1""3""2""12""14","16","18" };
            
string[] DKX1 = { "5","15","30"};
            
string[] DKY1 = { "2.5","10","17"};
            
string[] DKX2 = { "10""15""30" };
            
string[] DKY2 = { "2","12","18"};
            
this.picBoxChart.Image = System.Drawing.Image.FromFile(CreateLineChart(X1,Y1,X2,Y2,DKX1,DKY1,DKX2,DKY2));
        }
        
/// <summary>
        
/// 生成曲线图;
        
/// </summary>
        
/// <param name="X1">标准曲线X坐标</param>
        
/// <param name="Y1">标准曲线Y坐标</param>
        
/// <param name="X2">实际曲线X坐标</param>
        
/// <param name="Y2">实际曲线Y坐标</param>
        
/// <param name="DKX1">标准曲线断链点X坐标</param>
        
/// <param name="DKY1">标准曲线断链点Y坐标</param>
        
/// <param name="DKX2">实际曲线断链点X坐标</param>
        
/// <param name="DKY2">实际曲线断链点Y坐标</param>
        string CreateLineChart(string[] X1,string[] Y1,string[] X2,string[] Y2,string[] DKX1,string[] DKY1,string[] DKX2,string[] DKY2)
        {
            StringBuilder strBuild 
= new StringBuilder();
            
//两条曲线和断链点的XY轴坐标值;
            string XAxis1 = "";
            
string YAxis1 = "";
            
string XAxis2 = "";
            
string YAxis2 = "";
            
string DKXAxis1 = "";
            
string DKYAxis1 = "";
            
string DKXAxis2 = "";
            
string DKYAxis2 = "";
            
//生成X1输入点坐标值;
            if (X1 != null)
            {
                
for (int i = 0; i < X1.Length; i++)
                {
                    strBuild.Append(X1[i]);
                    strBuild.Append(
' ');
                }
                XAxis1 
= strBuild.ToString();
                strBuild.Remove(
0, strBuild.Length);
            }
            
//生成Y1输入点坐标值;
            if (Y1 != null)
            {
                
for (int i = 0; i < Y1.Length; i++)
                {
                    strBuild.Append(Y1[i]);
                    strBuild.Append(
' ');
                }
                YAxis1 
= strBuild.ToString();
                strBuild.Remove(
0, strBuild.Length);
            }
            
//生成X2输入点坐标值;
            if (X2 != null)
            {
                
for (int i = 0; i < X2.Length; i++)
                {
                    strBuild.Append(X2[i]);
                    strBuild.Append(
' ');
                }
                XAxis2 
= strBuild.ToString();
                strBuild.Remove(
0, strBuild.Length);
            }
            
//生成Y2输入点的坐标值;
            if (Y2 != null)
            {
                
for (int i = 0; i < Y2.Length; i++)
                {
                    strBuild.Append(Y2[i]);
                    strBuild.Append(
' ');
                }
                YAxis2 
= strBuild.ToString();
                strBuild.Remove(
0,strBuild.Length);
            }
            
//生成DKX1坐标值;
            if (DKX1 != null)
            {
                
for (int i = 0; i < DKX1.Length; i++)
                {
                    strBuild.Append(DKX1[i]);
                    strBuild.Append(
' ');
                }
                DKXAxis1 
= strBuild.ToString();
                strBuild.Remove(
0, strBuild.Length);
            }
            
//生成DKY1坐标值;
            if (DKY1 != null)
            {
                
for (int i = 0; i < DKY1.Length; i++)
                {
                    strBuild.Append(DKY1[i]);
                    strBuild.Append(
' ');
                }
                DKYAxis1 
= strBuild.ToString();
                strBuild.Remove(
0, strBuild.Length);
            }
            
//生成DKX2坐标值;
            if (DKX2 != null)
            {
                
for (int i = 0; i < DKX2.Length; i++)
                {
                    strBuild.Append(DKX2[i]);
                    strBuild.Append(
' ');
                }
                DKXAxis2 
= strBuild.ToString();
                strBuild.Remove(
0, strBuild.Length);
            }
            
//生成DKY2坐标值;
            if (DKY2 != null)
            {
                
for (int i = 0; i < DKY2.Length; i++)
                {
                    strBuild.Append(DKY2[i]);
                    strBuild.Append(
' ');
                }
                DKYAxis2 
= strBuild.ToString();
                strBuild.Remove(
0, strBuild.Length);
            }
            
//清除strBuild;
            strBuild = null;
            
//创建ChartSpace来放置图表;
            ChartSpace Space = new ChartSpace();
            
//在ChartSpace对象中添加新的图表对象;
            ChChart Chart = Space.Charts.Add(0);
            
//指定图表类型为线性图;
            Chart.Type = ChartChartTypeEnum.chChartTypeScatterSmoothLine;
            
//图表是否需要图例;
            Chart.HasLegend = true;
            
//设置图例位置;
            Chart.Legend.Position = ChartLegendPositionEnum.chLegendPositionBottom;
            
//设置图例字体大小;
            Chart.Legend.Font.Size = 11;
            
//给定标题;
            Chart.HasTitle = true;
            Chart.Title.Caption 
= "轨道右线轨迹比较图";
            
//给X,Y轴的图示说明;
            Chart.Axes[0].HasTitle = true;
            Chart.Axes[
0].Title.Caption = "Y";
            Chart.Axes[
1].HasTitle = true;
            Chart.Axes[
1].Title.Caption = "X";
            
//添加一个Series(标准曲线);
            Chart.SeriesCollection.Add(0);
            
//给Series取名字;
            Chart.SeriesCollection[0].SetData(ChartDimensionsEnum.chDimSeriesNames, (int)ChartSpecialDataSourcesEnum.chDataLiteral, "标准");
            
//给X轴传值;
            Chart.SeriesCollection[0].SetData(ChartDimensionsEnum.chDimXValues, (int)ChartSpecialDataSourcesEnum.chDataLiteral, XAxis1);
            
//给Y轴传值;
            Chart.SeriesCollection[0].SetData(ChartDimensionsEnum.chDimYValues, (int)ChartSpecialDataSourcesEnum.chDataLiteral, YAxis1);
            
//给图示加标注;
            
//Chart.SeriesCollection[0].DataLabelsCollection.Add();
            
//给图示加坐标值;
            
//Chart.SeriesCollection[0].DataLabelsCollection[0].HasValue = true;
            
//给图示加名称;
            
//Chart.SeriesCollection[0].DataLabelsCollection[0].HasSeriesName = true;
        
            
//添加一个Series(实际曲线);
            Chart.SeriesCollection.Add(1);
            
//给Series取名字;
            Chart.SeriesCollection[1].SetData(ChartDimensionsEnum.chDimSeriesNames, (int)ChartSpecialDataSourcesEnum.chDataLiteral, "实际");
            
//给X轴传值;
            Chart.SeriesCollection[1].SetData(ChartDimensionsEnum.chDimXValues, (int)ChartSpecialDataSourcesEnum.chDataLiteral, XAxis2);
            
//给Y轴传值;
            Chart.SeriesCollection[1].SetData(ChartDimensionsEnum.chDimYValues, (int)ChartSpecialDataSourcesEnum.chDataLiteral, YAxis2);
            
//给图示加标注;
            
//Chart.SeriesCollection[1].DataLabelsCollection.Add();
            
//给图示加坐标值;
            
//Chart.SeriesCollection[1].DataLabelsCollection[0].HasValue = true;
            
//给图示加名称;
            
//Chart.SeriesCollection[1].DataLabelsCollection[0].HasSeriesName = true;
            
//添加一个Series(标准曲线的断链点);
            Chart.SeriesCollection.Add(2);
            
//给Series取名字;
            Chart.SeriesCollection[2].SetData(ChartDimensionsEnum.chDimSeriesNames, (int)ChartSpecialDataSourcesEnum.chDataLiteral, "标准断链点");
            
//重新给Series分类;
            Chart.SeriesCollection[2].Type = ChartChartTypeEnum.chChartTypeScatterMarkers;
            
//给Series设置显示样式;
            Chart.SeriesCollection[2].Marker.Style = ChartMarkerStyleEnum.chMarkerStyleCircle;
            
//设置显示的断链点大小;
            Chart.SeriesCollection[2].Marker.Size = 7;
            
//给Series设置颜色;
            Chart.SeriesCollection[2].Interior.Color = "Green";
            
//给Series添加标注;
            Chart.SeriesCollection[2].DataLabelsCollection.Add();
            Chart.SeriesCollection[
2].DataLabelsCollection[0].HasValue = true;
            
//给X轴传值;
            Chart.SeriesCollection[2].SetData(ChartDimensionsEnum.chDimXValues, (int)ChartSpecialDataSourcesEnum.chDataLiteral, DKXAxis1);
            
//给Y轴传值;
            Chart.SeriesCollection[2].SetData(ChartDimensionsEnum.chDimYValues, (int)ChartSpecialDataSourcesEnum.chDataLiteral, DKYAxis1);
            
////添加一个Series(实际曲线的断链点);
            ChSeries Dot = Chart.SeriesCollection.Add(3);
            
//给Series取名字;
            Dot.SetData(ChartDimensionsEnum.chDimSeriesNames, (int)ChartSpecialDataSourcesEnum.chDataLiteral, "实际断链点");
            
//设置图示类型为点装图;
            Dot.Type = ChartChartTypeEnum.chChartTypeScatterMarkers;
            
//显示为矩形;
            Dot.Marker.Style = ChartMarkerStyleEnum.chMarkerStyleSquare;
            
//设置显示颜色为黄色;
            Dot.Interior.Color = "Yellow";
           
//设置图形显示大小;
            Dot.Marker.Size = 7;
            
//给行纵轴赋值;
            Dot.SetData(ChartDimensionsEnum.chDimXValues, (int)ChartSpecialDataSourcesEnum.chDataLiteral, DKXAxis2);
            Dot.SetData(ChartDimensionsEnum.chDimYValues, (
int)ChartSpecialDataSourcesEnum.chDataLiteral, DKYAxis2);
            
//添加标注;
            Dot.DataLabelsCollection.Add();
            Dot.DataLabelsCollection[
0].HasValue = true;
            
//输出成GIF文件            
            string strAbsolutePath = @". empChart.gif";
            Space.ExportPicture(strAbsolutePath, 
"GIF"400533);
            
//返回生成的曲线图路径字符串;
            return strAbsolutePath;
        }
    }

抱歉!评论已关闭.