使用OWC生成饼状图和柱状图

代码在.net 1.1 和OWC 10下面测试通过。
XValue类似于"a\tb\tc\td\t"
YValue类似于"1\t3\t6\t2\t"
一、生成柱状图
private   void  CreatChart()
{
    ChartSpaceClass csc 
= new ChartSpaceClass();
    
//添加一个图表
    ChChart cch = csc.Charts.Add(0);
    csc.Border.Color
="#7dd4fa";
    
    
//OWC10.ChBorder chBorder=(OWC10.ChBorder)csc.Constants;
    
    
//指定图表类型
    cch.Type = ChartChartTypeEnum.chChartTypeColumnClustered;
    
    
    
//设置特定图表的高度与宽度之比
    cch.AspectRatio = 20;
    
//指定是否显示网格线
    cch.Axes[0].HasMajorGridlines = false;
    cch.Axes[
0].HasMinorGridlines = false;
    cch.Axes[
1].HasMajorGridlines = false;
    cch.Axes[
1].HasMinorGridlines = false;
    
    
//指定图表是否需要图例
    cch.HasLegend = false;
    
//给定图表标题
    cch.HasTitle = false;            

    
//设置x柱文字的大小
    cch.Axes[0].Font.Size=20;
    cch.Axes[
0].Font.Bold=true;
    cch.Axes[
0].Orientation = (int)ChartLabelOrientationEnum.chLabelOrientationHorizontal;
    
    
    
//图例的位置
    
//cch.Legend.Position = OWC10.ChartLegendPositionEnum.chLegendPositionBottom;
    string type =Request.QueryString["type"]==null?"":Request.QueryString["type"].ToString();
    
string date=Request.QueryString["date"]==null?"":Request.QueryString["date"].ToString();
    
string[] strData = esWapper.getChartData(type,date);
    
//给定需要的数据
    
//Y轴数据
    string YValue = strData[1];
    
//X轴数据
    string XValue  = strData[0];
    cch.SeriesCollection.Add(
0);
    
    
    
//柱体颜色            
    cch.SeriesCollection[0].Interior.SetPatterned(ChartPatternTypeEnum.chPattern90Percent,"#7dd4fa",
"#7dd4fa");

    cch.SeriesCollection[
0].SetData(ChartDimensionsEnum.chDimCategories,Convert.ToInt32(
ChartSpecialDataSourcesEnum.chDataLiteral),XValue) ;

    cch.SeriesCollection[
0].SetData(ChartDimensionsEnum.chDimValues,Convert.ToInt32(
ChartSpecialDataSourcesEnum.chDataLiteral),YValue) ;
    
    
    
//以列宽百分比返回或设置相邻分类标志之间的间距
    cch.SeriesCollection[0].GapWidth = 80;
//            cch.SeriesCollection[0].Points[0].Interior.FillType = ChartFillStyleEnum.chSolid;
//            cch.SeriesCollection[0].Points[4].Interior.SetPresetGradient(
//                OWC10.ChartGradientStyleEnum.chGradientDiagonalUp,
//                OWC10.ChartGradientVariantEnum.chGradientVariantEdges,
//                OWC10.ChartPresetGradientTypeEnum.chGradientGoldII);
    
//cch.SeriesCollection[0].Line.set_Weight(OWC10.LineWeightEnum.owcLineWeightHairline  );

    
//增加数据值标签
    cch.SeriesCollection[0].DataLabelsCollection.Add();
    cch.SeriesCollection[
0].DataLabelsCollection[0].HasValue = true;

    
//边框颜色
    csc.Interior.SetPatterned(ChartPatternTypeEnum.chPattern90Percent,"#A6E3FF","#A6E3FF");
    Response.BinaryWrite((Byte[])(csc.GetPicture(
"png",980600)));
    
//Response.End();
}

二、生成饼状图
public  void ChartPie()                    
{
    //创建一个图形容器对象
    OWC10.ChartSpace objCSpace = new OWC10.ChartSpaceClass();
    objCSpace.Border.Color="white";
    //在图形容器中增加一个图形对象
    OWC10.ChChart objChart = objCSpace.Charts.Add(0);
    //将图形的类型设置为柱状图的一种
    objChart.Type = OWC10.ChartChartTypeEnum.chChartTypePie3D;

    //在图形对象中添加一个系列
    objChart.SeriesCollection.Add(0);
    string type =Request.QueryString["type"]==null?"":Request.QueryString["type"].ToString();
    string date=Request.QueryString["date"]==null?"":Request.QueryString["date"].ToString();
    string[] strData = esWapper.getChartData(type,date);
    //string[] strData = new string[2];
    
//给定需要的数据
    
//数据
    string YValue = strData[1];
    //分类
    string XValue  = strData[0];
    //给定系列的名字
    objChart.SeriesCollection[0].SetData (OWC10.ChartDimensionsEnum.chDimCategories,
        + (int)OWC10.ChartSpecialDataSourcesEnum.chDataLiteral, XValue);
    //给定值
    objChart.SeriesCollection[0].SetData (OWC10.ChartDimensionsEnum.chDimValues,
        + (int)OWC10.ChartSpecialDataSourcesEnum.chDataLiteral, YValue);

    objChart.Inclination=55;
    
    
    //将第三个扇区抽离出来
    
//Explosion:返回或设置指定饼图或圆环图扇面的分离程度值。有效范围为 0 到 1000。分离程度值等于图表半径的百分比。
    
//objChart.SeriesCollection[0].Points[2].Explosion = 45;

    
//增加数据值标签
    objChart.SeriesCollection[0].DataLabelsCollection.Add();            
    //分类名
    
//objChart.SeriesCollection[0].DataLabelsCollection[0].HasCategoryName=true;
    
//系列名
    
//objChart.SeriesCollection[0].DataLabelsCollection[0].HasSeriesName=true;
    
//设置图例边框颜色
    
    
//设置显示图例
    objChart.HasLegend=true;
    //设置图例的位置,必须先把图例的显示属性设置为true
    objChart.Legend.Position = OWC10.ChartLegendPositionEnum.chLegendPositionBottom;
    objChart.Legend.Border.Color="#FFFFFF";
    objChart.Legend.Font.Size=20;
    
    //显示各部分的数值
    objChart.SeriesCollection[0].DataLabelsCollection[0].HasValue = false;

    //设置饼状图中字体的大小
    objChart.SeriesCollection[0].DataLabelsCollection[0].Font.Size=14;
    
    //显示各部分的百分比
    objChart.SeriesCollection[0].DataLabelsCollection[0].HasPercentage = true;
    
    //Response.Write(DateTime.Now.ToLongDateString());            
    Response.BinaryWrite((Byte[])(objCSpace.GetPicture("gif",800, 500)));
    //Response.End();
}
如何安装mschart#Region "定义变量" Const XOffset As Integer = 50, Yoffset As Integer = 20 Dim WithEvents PicCurve As PictureBox Dim xStep As Single = 5, yStep As Single Dim ValueArray As ArrayList Dim ThresHold() As Single 'HIHI、HI、LO、LOLO Dim Name As String = "参数名" Dim Unit As String = "单位" #End Region #Region "构造函数、析构函数" Public Sub New(ByVal mPictureBox As PictureBox, ByVal mThresHold() As Single, ByVal mName As String) ValueArray = New ArrayList PicCurve = mPictureBox ThresHold = mThresHold mPictureBox.BorderStyle = BorderStyle.None Name = mName End Sub Protected Overrides Sub Finalize() MyBase.Finalize() ValueArray.Clear() End Sub #End Region #Region "添加要绘制的点的信息" Public Sub AddValue(ByVal Value As Single) 'Value = ThresHold(0) * Rnd() + ThresHold(3) '测试代码 ValueArray.Add(Value) Call DrawCurve(GetGraphics(PicCurve)) End Sub Public Sub AddValues(ByVal Values() As Single, ByVal G As Graphics) For i As Integer = 0 To Values.Length - 1 ValueArray.Add(Values(i)) Next Call DrawCurve(G) End Sub #End Region #Region "绘制点之间的连线" Private Sub DrawCurve(ByVal G As Graphics, Optional ByVal mClear As Boolean = True) If ValueArray.Count > 0 Then If mClear Then G.Clear(Color.White) G.SmoothingMode = Drawing2D.SmoothingMode.HighQuality Dim mPoints(ValueArray.Count - 1) As Point, Position As Integer = XOffset For i As Integer = ValueArray.Count - 1 To 0 Step -1 Dim ThisValue As Single = CType(ValueArray(i), Single) 'If Position < PicCurve.Width Then Position += xStep Else Exit For Position += xStep mPoints(i) = New Point(Position, (ThresHold(0) - ThisValue) * yStep + Yoffset) Next G.DrawCurve(Pens.Blue, mPoints) mPoints = Nothing End If End Sub #End Region #Region "绘制坐标系统" Private Sub DrawReferenceFrame(ByVal G As Graphics) Dim mPoint1 As New Point, mPoint2 As New Point '定义绘图画笔 Dim MyPen As New Pen(Color.Black, 3) Dim MyStringFormat As New System.Drawing.StringFormat MyStringFormat.Alignment = StringAlignment.Center Dim mSize As New SizeF MyPen.SetLineCap(Drawing2D.LineCap.NoAnchor, Drawing2D.LineCap.ArrowAnchor, Drawing2D.DashCap.Flat) Dim mFont As Font = New Font(FontFamily.GenericSansSerif, 12.0F, FontStyle.Bold) '绘制Y轴 MyPen.Color = Color.Black mPoint1 = New Point(XOffset, PicCurve.Height) mPoint2 = New Point(XOffset, 0) G.DrawLine(MyPen, mPoint1, mPoint2) '绘制X轴 MyPen.Color = Color.LightGreen mPoint1 = New Point(XOffset, PicCurve.Height / 2) mPoint2 = New Point(PicCurve.Width, PicCurve.Height / 2) G.DrawLine(MyPen, mPoint1, mPoint2) '绘制参数名 MyStringFormat.FormatFlags = StringFormatFlags.DirectionVertical mSize = G.MeasureString(Name, mFont) mPoint1.Offset(-mSize.Height, 0) G.DrawString(Name, mFont, Brushes.Black, mPoint1, MyStringFormat) '绘制参数各门限 MyPen.DashStyle = Drawing2D.DashStyle.Dash : MyPen.Width = 2 MyPen.SetLineCap(Drawing2D.LineCap.NoAnchor, Drawing2D.LineCap.NoAnchor, Drawing2D.DashCap.Round) 'HI If ThresHold(1) <> ThresHold(0) Then MyPen.Color = Color.Yellow mPoint1 = New Point(XOffset, (ThresHold(0) - ThresHold(1)) * yStep + Yoffset) mPoint2 = New Point(PicCurve.Width, (ThresHold(0) - ThresHold(1)) * yStep + Yoffset) G.DrawLine(MyPen, mPoint1, mPoint2) mSize = G.MeasureString(ThresHold(1).ToString, mFont) mPoint1.Offset(-mSize.Width, -mSize.Height / 2) G.DrawString(ThresHold(1).ToString, mFont, Brushes.Yellow, mPoint1) End If 'LO If ThresHold(2) <> ThresHold(3) Then mPoint1 = New Point(XOffset, (ThresHold(0) - ThresHold(2)) * yStep + Yoffset) mPoint2 = New Point(PicCurve.Width, (ThresHold(0) - ThresHold(2)) * yStep + Yoffset) G.DrawLine(MyPen, mPoint1, mPoint2) mSize = G.MeasureString(ThresHold(2).ToString, mFont) mPoint1.Offset(-mSize.Width, -mSize.Height / 2) G.DrawString(ThresHold(2).ToString, mFont, Brushes.Yellow, mPoint1) End If 'HIHI MyPen.Color = Color.Red mPoint1 = New Point(XOffset, Yoffset) mPoint2 = New Point(PicCurve.Width, Yoffset) G.DrawLine(MyPen, mPoint1, mPoint2) mSize = G.MeasureString(ThresHold(0).ToString, mFont) mPoint1.Offset(-mSize.Width, -mSize.Height / 2) G.DrawString(ThresHold(0).ToString, mFont, Brushes.Red, mPoint1) 'LOLO mPoint1 = New Point(XOffset, PicCurve.Height - Yoffset) mPoint2 = New Point(PicCurve.Width, PicCurve.Height - Yoffset) G.DrawLine(MyPen, mPoint1, mPoint2) mSize = G.MeasureString(ThresHold(3).ToString, mFont) mPoint1.Offset(-mSize.Width, -mSize.Height / 2) G.DrawString(ThresHold(3).ToString, mFont, Brushes.Red, mPoint1) MyPen.Dispose() mFont.Dispose() End Sub #End Region #Region "要在其上绘制的控件事件" Private Sub PicCurve_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PicCurve.Paint Call DrawReferenceFrame(e.Graphics) End Sub Private Sub PicCurve_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles PicCurve.Resize On Error Resume Next xStep = 5 yStep = (PicCurve.Height - 2 * Yoffset) / (ThresHold(0) - ThresHold(3)) End Sub #End Region #Region "绘制永久图像" Function GetGraphics(ByRef pic As PictureBox) As Graphics Dim bmp As Bitmap = New Bitmap(pic.Width, pic.Height) pic.Image = bmp Dim g As System.Drawing.Graphics = Graphics.FromImage(bmp) Return g End Function #End Region #Region "保存图形" Public Sub SaveCurve(ByVal FileName As String) Dim bmp As New Bitmap(PicCurve.Width, PicCurve.Height) Dim g As Graphics = Graphics.FromImage(bmp) Call DrawReferenceFrame(g) Call DrawCurve(g, False) bmp.Save(FileName) End Sub #End Region End Class
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值