您的位置:首页 > 编程语言 > C#

C#绘制柱形图、饼图、曲线图

2016-01-29 10:30 549 查看
using System;

using System.Data;

using System.Text;

using Microsoft.Office.Interop.Owc11;

namespace Test

{

/**//// <summary>

/// sclsmile

/// 根据数据动态生成图形(柱形图、饼图、曲线图)

/// 2016-01-29

/// </summary>

public class ShowChart

{

#region 属性

private string _phaysicalimagepath;//图片存放路径

private string _title; //图片标题

private string _xtitle;//图片x座标名称

private string _ytitle;//图片y座标名称

private string _seriesname;//图例名称

private int _picwidth;//图片宽度

private int _pichight;//图片高度

private DataTable _datasource;//图片数据源

private string strCategory;//图片数据源的分类

private string strValue;//图片数据源的值

/**//// <summary>

/// 图片存放路径

/// </summary>

public string PhaysicalImagePath

{

set{_phaysicalimagepath=value;}

get{return _phaysicalimagepath;}

}

/**//// <summary>

/// 图片标题

/// </summary>

public string Title

{

set{_title=value;}

get{return _title;}

}

/**//// <summary>

/// 图片标题

/// </summary>

public string XTitle

{

set{_xtitle=value;}

get{return _xtitle;}

}

/**//// <summary>

/// 图片标题

/// </summary>

public string YTitle

{

set{_ytitle=value;}

get{return _ytitle;}

}

/**//// <summary>

/// 图例名称

/// </summary>

public string SeriesName

{

set{_seriesname=value;}

get{return _seriesname;}

}

/**//// <summary>

/// 图片宽度

/// </summary>

public int PicWidth

{

set{_picwidth=value;}

get{return _picwidth;}

}

/**//// <summary>

/// 图片高度

/// </summary>

public int PicHight

{

set{_pichight=value;}

get{return _pichight;}

}

/**//// <summary>

/// 图片数据源

/// </summary>

public DataTable DataSource

{

set

{

_datasource=value;

strCategory=GetColumnsStr(_datasource);

strValue=GetValueStr(_datasource);

}

get{return _datasource;}

}

/**//// <summary>

/// 图片数据源的分类

/// </summary>

private string GetColumnsStr(DataTable dt)

{

StringBuilder strList=new StringBuilder();

foreach(DataRow r in dt.Rows)

{

strList.Append(r[0].ToString()+'\t');

}

return strList.ToString();

}

/**//// <summary>

/// 图片数据源的值

/// </summary>

private string GetValueStr(DataTable dt)

{

StringBuilder strList=new StringBuilder();

foreach(DataRow r in dt.Rows)

{

strList.Append(r[1].ToString()+'\t');

}

return strList.ToString();

}

#endregion

#region 构造函数

public ShowChart()

{

//

// TODO: 在此处添加构造函数逻辑

//

}

public ShowChart(string PhaysicalImagePath,string Title,string XTitle,string YTitle,string SeriesName)

{

_phaysicalimagepath=PhaysicalImagePath;

_title=Title;

_xtitle=XTitle;

_ytitle=YTitle;

_seriesname=SeriesName;

}

#endregion

#region 输出柱形图

/**//// <summary>

/// 柱形图

/// </summary>

/// <returns></returns>

public string CreateColumn()

{

Microsoft.Office.Interop.Owc11.ChartSpace objCSpace = new Microsoft.Office.Interop.Owc11.ChartSpaceClass();//创建ChartSpace对象来放置图表

Microsoft.Office.Interop.Owc11.ChChart objChart = objCSpace.Charts.Add(0);//在ChartSpace对象中添加图表,Add方法返回chart对象

//指定图表的类型。类型由OWC.ChartChartTypeEnum枚举值得到//Microsoft.Office.Interop.OWC.ChartChartTypeEnum

objChart.Type=Microsoft.Office.Interop.Owc11.ChartChartTypeEnum.chChartTypeColumnClustered;

//指定图表是否需要图例

objChart.HasLegend = true;

//标题

objChart.HasTitle = true;

objChart.Title.Caption= _title;

// objChart.Title.Font.Bold=true;

// objChart.Title.Font.Color="blue";

#region 样式设置

//旋转

// objChart.Rotation = 360;//表示指定三维图表的旋转角度

// objChart.Inclination = 10;//表示指定三维图表的视图斜率。有效范围为 -90 到 90

//背景颜色

// objChart.PlotArea.Interior.Color = "red";

//底座颜色

// objChart.PlotArea.Floor.Interior.Color = "green";

//

// objChart.Overlap = 50;//单个类别中标志之间的重叠量

#endregion

//x,y轴的图示说明

objChart.Axes[0].HasTitle = true;

objChart.Axes[0].Title.Caption = "X : "+this._xtitle;

objChart.Axes[1].HasTitle = true;

objChart.Axes[1].Title.Caption = "Y : "+this._ytitle;

//添加一个series

Microsoft.Office.Interop.Owc11.ChSeries ThisChSeries = objChart.SeriesCollection.Add(0);

//给定series的名字

ThisChSeries.SetData(Microsoft.Office.Interop.Owc11.ChartDimensionsEnum.chDimSeriesNames,

Microsoft.Office.Interop.Owc11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(),SeriesName);

//给定分类

ThisChSeries.SetData(Microsoft.Office.Interop.Owc11.ChartDimensionsEnum.chDimCategories,

Microsoft.Office.Interop.Owc11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(),strCategory);

//给定值

ThisChSeries.SetData(Microsoft.Office.Interop.Owc11.ChartDimensionsEnum.chDimValues,

Microsoft.Office.Interop.Owc11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(),strValue);

//表示柱形图上的单个数据标志

Microsoft.Office.Interop.Owc11.ChDataLabels dl=objChart.SeriesCollection[0].DataLabelsCollection.Add();

dl.HasValue=true;

// dl.Position=Microsoft.Office.Interop.Owc11.ChartDataLabelPositionEnum.chLabelPositionOutsideEnd;

string filename=DateTime.Now.ToString("yyyyMMddHHmmssff")+".gif";

string strAbsolutePath = _phaysicalimagepath + "\\"+filename;

objCSpace.ExportPicture(strAbsolutePath, "GIF", _picwidth, _pichight);//输出成GIF文件.

return filename;

}

#endregion

#region 输出饼图

/**//// <summary>

/// 饼图

/// </summary>

/// <returns></returns>

public string CreatePie()

{

Microsoft.Office.Interop.Owc11.ChartSpace objCSpace = new Microsoft.Office.Interop.Owc11.ChartSpaceClass();//创建ChartSpace对象来放置图表

Microsoft.Office.Interop.Owc11.ChChart objChart = objCSpace.Charts.Add(0);//在ChartSpace对象中添加图表,Add方法返回chart对象

//指定图表的类型

objChart.Type=Microsoft.Office.Interop.Owc11.ChartChartTypeEnum.chChartTypePie;

//指定图表是否需要图例

objChart.HasLegend = true;

//标题

objChart.HasTitle = true;

objChart.Title.Caption= _title;

//添加一个series

Microsoft.Office.Interop.Owc11.ChSeries ThisChSeries = objChart.SeriesCollection.Add(0);

//给定series的名字

ThisChSeries.SetData(Microsoft.Office.Interop.Owc11.ChartDimensionsEnum.chDimSeriesNames,

Microsoft.Office.Interop.Owc11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(),SeriesName);

//给定分类

ThisChSeries.SetData(Microsoft.Office.Interop.Owc11.ChartDimensionsEnum.chDimCategories,

Microsoft.Office.Interop.Owc11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(),strCategory);

//给定值

ThisChSeries.SetData(Microsoft.Office.Interop.Owc11.ChartDimensionsEnum.chDimValues,

Microsoft.Office.Interop.Owc11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(),strValue);

//表示系列或趋势线上的单个数据标志

Microsoft.Office.Interop.Owc11.ChDataLabels dl=objChart.SeriesCollection[0].DataLabelsCollection.Add();

dl.HasValue=true;

dl.HasPercentage=true;

//图表绘图区的图例放置在右侧。

// dl.Position=Microsoft.Office.Interop.Owc11.ChartDataLabelPositionEnum.chLabelPositionRight;

string filename=DateTime.Now.Ticks.ToString()+".gif";

string strAbsolutePath = _phaysicalimagepath + "\\"+filename;

objCSpace.ExportPicture(strAbsolutePath, "GIF", _picwidth, _pichight);//输出成GIF文件.

return filename;

}

#endregion

#region 输出曲线图

/**//// <summary>

/// 曲线图

/// </summary>

/// <returns></returns>

public string CreateLine()

{

//创建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.Type = Microsoft.Office.Interop.Owc11.ChartChartTypeEnum.chChartTypeSmoothLine;

//指定图表是否需要图例

objChart.HasLegend = true;

//给定标题

objChart.HasTitle = true;

objChart.Title.Caption =this._title;

//给定x,y轴的图示说明

objChart.Axes[0].HasTitle = true;

objChart.Axes[0].Title.Caption = "X : " +this._xtitle;

objChart.Axes[1].HasTitle = true;

objChart.Axes[1].Title.Caption = "Y : " +this._ytitle;

//添加一个series

ChSeries chseries=objChart.SeriesCollection.Add(0);

chseries.Line.set_Weight(Microsoft.Office.Interop.Owc11.LineWeightEnum.owcLineWeightHairline);

//给定series的名字

objChart.SeriesCollection[0].SetData (Microsoft.Office.Interop.Owc11.ChartDimensionsEnum.chDimSeriesNames,

+ (int)Microsoft.Office.Interop.Owc11.ChartSpecialDataSourcesEnum.chDataLiteral, SeriesName);

//给定分类

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);

//表示曲线上的单个数据标志

Microsoft.Office.Interop.Owc11.ChDataLabels dl=objChart.SeriesCollection[0].DataLabelsCollection.Add();

dl.HasValue=true;

string filename=DateTime.Now.ToString("yyyyMMddHHmmssff")+".gif";

//string filename = "quxian.gif";

string strAbsolutePath = _phaysicalimagepath + "\\"+filename;

objCSpace.ExportPicture(strAbsolutePath, "GIF", _picwidth, _pichight);//输出成GIF文件.

return filename;

}

#endregion

#region 调用说明及范例

// 在要显示统计图的页面代码直接调用,方法类似如下:

//

// ShowChart chart=new ShowChart(); 创建对象

// chart.Title="标题";

// chart.XTitle ="月份";

// chart.YTitle ="数量";

// chart.SeriesName="图例";

// string filepath=Server.MapPath(".")+"\\ChartImages";

// chart.PhaysicalImagePath=filepath;

// chart.PicHight=320;

// chart.PicWidth=500;

// chart.DataSource=GetData();//这是你的数据源

// Response.Write("<img src='" +filepath+"\\"+chart.CreateColumn()+"'/>");

// this.Image1.ImageUrl=filepath+"\\"+chart.CreateBar();//显示给图像控件。

#endregion

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: