用 C# 绘制曲线图(Curve图,增加自动适应和多曲线绘制)

本文介绍如何使用C#改进原有的曲线图绘制方法,实现数据自动适应和多曲线绘制功能。通过示例代码展示如何根据数据调整边距和字体大小,使曲线图更加酷炫。只需调用DrawImage方法,即可在项目中应用。
摘要由CSDN通过智能技术生成

在N久之前,我发过一个绘制曲线的文章 先发个绘制曲线图的:用ASP.NET with C# 绘制曲线图(Curve图) 里面介绍了简单的绘制曲线图的方法.近来重新翻阅了这篇文章.心情大好之下又重新修改了一下绘制方法,增加自动适应数据的处理和可以根据传入的数据绘制多条曲线

照例先上图:

curve1.png

比以前Cool吧?呵呵,其实就是根据数据自动计算边距和字体等.

 

         ///   <summary>
        
///  自动根据参数调整图像大小
        
///   </summary>
         public   void  Fit()
        {
            
// 计算字体距离
            intFontSpace  =  FontSize  +   5 ;
            
// 计算图像边距
             float  fltSpace  =  Math.Min(Width  /   6 , Height  /   6 );
            XSpace 
=  fltSpace;
            YSpace 
=  fltSpace;
            
// 计算X轴刻度宽度
            XSlice  =  (Width  -   2   *  XSpace)  /  (Keys.Length  -   1 );
            
// 计算Y轴刻度宽度和Y轴刻度开始值
             float  fltMinValue  =   0 ;
            
float  fltMaxValue  =   0 ;
            
for  ( int  i  =   0 ; i  <  Values.Length; i ++ )
            {
                
if  (Values[i]  <  fltMinValue)
                {
                    fltMinValue 
=  Values[i];
                }
                
else   if  (Values[i]  >  fltMaxValue)
                {
                    fltMaxValue 
=  Values[i];
                }
            }
            
if  (YSliceBegin  >  fltMinValue)
            {
                YSliceBegin 
=  fltMinValue;
            }
            
int  intYSliceCount  =  ( int )(fltMaxValue  /  YSliceValue);
            
if  (fltMaxValue  %  YSliceValue  !=   0 )
            {
                intYSliceCount
++ ;
            }
            YSlice 
=  (Height  -   2   *  YSpace)  /  intYSliceCount;
        }

 

看我把数据缩小一个级别的效果:

 

curve2.png


因为代码里面充斥了大量注释,也不敲太多文字了..完整代码奉上:

using  System;
using  System.Collections.Generic;
using  System.Text;
using  System.Drawing;
using  System.Data;
using  System.Drawing.Drawing2D;

namespace  SarchPMS.Business.Draw
{
    
public   class  DrawingCurve : DrawingChart
    {
        
///   <summary>
        
///  画曲线图
        
///   </summary>
        
///   <param name="dsParameter"></param>
        
///   <returns></returns>
         public   override  Bitmap DrawImage(DataSet dsParameter)
        {
            Curve2D cuv2D 
=   new  Curve2D();
            cuv2D.Fit();
            
return  cuv2D.CreateImage();
        }
    }

    
public   class  Curve2D
    {
        
private  Graphics objGraphics;  // Graphics 类提供将对象绘制到显示设备的方法
         private  Bitmap objBitmap;  // 位图对象

        
private   float  fltWidth  =   480 // 图像宽度
         private   float  fltHeight  =   248 // 图像高度
         private   float  fltXSlice  =   50 // X轴刻度宽度
         private   float  fltYSlice  =   50 // Y轴刻度宽度
         private   float  fltYSliceValue  =   20 // Y轴刻度的数值宽度
         private   float  fltYSliceBegin  =   0 // Y轴刻度开始值
         private   float  fltTension  =   0.5f ;
        
private   string  strTitle  =   " 曲线图 " // 标题
         private   string  strXAxisText  =   " 月份 " // X轴说明文字
         private   string  strYAxisText  =   " 万元 " // Y轴说明文字
         private   string [] strsKeys  =   new   string [] {  " 一月 " " 二月 " " 三月 " " 四月 " " 五月 " " 六月 " " 七月 " " 八月 " " 九月 " " 十月 " " 十一月 " " 十二月 "  };  //
         private   float [] fltsValues  =   new   float [] {  20.0f 30.0f 50.0f 55.4f 21.6f 12.8f 99.5f 36.4f 78.2f 56.4f 45.8f 66.5f 99.5f 36.4f 78.2f 56.4f 45.8f 66.5f 20.0f 30.0f 50.0f 55.4f 21.6f 12.8f  };  //
         private  Color clrBgColor  =  Color.Snow;  // 背景色
         private  Color clrTextColor  =  Color.Black;  // 文字颜色
         private  Color clrBorderColor  =  Color.Black;  // 整体边框颜色
         private  Color clrAxisColor  =  Color.Black;  // 轴线颜色
         private  Color clrAxisTextColor  =  Color.Black;  // 轴说明文字颜色
         private  Color clrSliceTextColor  =  Color.Black;  // 刻度文字颜色
         private
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值