OWC中组合图的开发(柱状图+折线图)

ExpandedBlockStart.gif 代码
  // 创建ChartSpace对象来放置图表
        ChartSpace chartSpace  =   new  ChartSpaceClass();

        
// 是否显示图例
        chartSpace.HasChartSpaceLegend  =   true ;

        
// 在ChartSpace对象中添加图表,Add方法返回Chart对象
        ChChart chChart  =  chartSpace.Charts.Add( 0 );


        
// 给定标题
        chChart.HasTitle  =   true ;
        chChart.Title.Caption 
=   " 材料不良率 " ;

        
// 给定x,y轴的图示说明
        chChart.Axes[ 0 ].HasTitle  =   true ;
        chChart.Axes[
0 ].Title.Caption  =   " X : 日期 " ;


        chChart.Axes[
1 ].HasTitle  =   true ;
        chChart.Axes[
1 ].Title.Caption  =   " Y : 不良率 " ;


        
/* 柱形堆积图 */

        
// 设定图表类型
        chChart.SeriesCollection.Add( 0 );
        chChart.SeriesCollection[
0 ].Type  =  ChartChartTypeEnum.chChartTypeColumnStacked;


        
// 系列PG1
        
// 给定系列的名字

        chChart.SeriesCollection[
0 ].SetData(ChartDimensionsEnum.chDimSeriesNames,
            (
int )ChartSpecialDataSourcesEnum.chDataLiteral,  " PG1 " );

        
// 给定分类
        chChart.SeriesCollection[ 0 ].SetData(ChartDimensionsEnum.chDimCategories,
            (
int )ChartSpecialDataSourcesEnum.chDataLiteral,  " 材料A\t材料B\t材料C\t材料D\t " );

        
// 给定系列的值
        chChart.SeriesCollection[ 0 ].SetData
            (ChartDimensionsEnum.chDimValues,
            (
int )ChartSpecialDataSourcesEnum.chDataLiteral,  " 1\t0\t2\t2\t " );


        
// 系列PD1
        
// 给定系列的名字
        chChart.SeriesCollection.Add( 1 );
        chChart.SeriesCollection[
1 ].SetData(ChartDimensionsEnum.chDimSeriesNames,
            
+ ( int )ChartSpecialDataSourcesEnum.chDataLiteral,  " PD1 " );

        
// 给定分类
        chChart.SeriesCollection[ 1 ].SetData(ChartDimensionsEnum.chDimCategories,
            
+ ( int )ChartSpecialDataSourcesEnum.chDataLiteral,  " 材料A\t材料B\t材料C\t材料D\t " );

        
// 给定系列的值
        chChart.SeriesCollection[ 1 ].SetData
            (ChartDimensionsEnum.chDimValues,
            (
int )ChartSpecialDataSourcesEnum.chDataLiteral,  " 0\t3\t2\t3\t " );


        
// 系列PB1
        
// 给定系列的名字
        chChart.SeriesCollection.Add( 2 );
        chChart.SeriesCollection[
0 ].SetData(ChartDimensionsEnum.chDimSeriesNames,
            
+ ( int )ChartSpecialDataSourcesEnum.chDataLiteral,  " PB1 " );

        
// 给定分类
        chChart.SeriesCollection[ 2 ].SetData(ChartDimensionsEnum.chDimCategories,
            
+ ( int )ChartSpecialDataSourcesEnum.chDataLiteral,  " 材料A\t材料B\t材料C\t材料D\t " );

        
// 给定系列的值
        chChart.SeriesCollection[ 2 ].SetData
            (ChartDimensionsEnum.chDimValues,
            (
int )ChartSpecialDataSourcesEnum.chDataLiteral,  " 1\t1\t1\t2\t " );







        
/* 折线图 */
        
// 再增加一个系列
        ChSeries chSeries  =  chChart.SeriesCollection.Add( 0 );

        
// 指定图表类型
        chSeries.Type  =  ChartChartTypeEnum.chChartTypeLineMarkers;
        chSeries.Ungroup(
true );

        ChAxis chAxis 
=  chChart.Axes.Add(chSeries.get_Scalings(ChartDimensionsEnum.chDimValues));
        chAxis.Position 
=  ChartAxisPositionEnum.chAxisPositionRight;

        chAxis.HasMinorGridlines 
=   false ;
        chAxis.HasTitle 
=   true ;
        chAxis.Title.Caption 
=   " 使用数量 " ;
        
// 给定系列的名字
        chSeries.SetData(ChartDimensionsEnum.chDimSeriesNames,
            
+ ( int )ChartSpecialDataSourcesEnum.chDataLiteral,  " 使用数量 " );

        
// 给定系列的值
        chSeries.SetData
            (ChartDimensionsEnum.chDimValues,
            (
int )ChartSpecialDataSourcesEnum.chDataLiteral,  " 200\t120\t90\t150\t " );


        
// 输出成GIF文件.
         string  strAbsolutePath  =  (Server.MapPath( " . " ))  +   " \\Temp\\test.gif " ;
        chartSpace.ExportPicture(strAbsolutePath, 
" GIF " 600 350 );


        
// 创建GIF文件的相对路径.
         string  strRelativePath  =   " ./Temp/test.gif " ;

        
// 显示图片
        Image1.ImageUrl  =  strRelativePath.ToString(); 

 

转载于:https://www.cnblogs.com/ycsfwhh/archive/2011/01/08/1930584.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如何安装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、付费专栏及课程。

余额充值