C绘制曲线分析.docx
- 文档编号:11876143
- 上传时间:2023-06-03
- 格式:DOCX
- 页数:25
- 大小:18.61KB
C绘制曲线分析.docx
《C绘制曲线分析.docx》由会员分享,可在线阅读,更多相关《C绘制曲线分析.docx(25页珍藏版)》请在冰点文库上搜索。
C绘制曲线分析
这篇文章主要介绍了C#绘制曲线图的方法,以完整实例形式较为详细的分析了C#进行曲线绘制的具体步骤与相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
本文实例讲述了C#绘制曲线图的方法。
分享给大家供大家参考。
具体如下:
undefined
1.曲线图效果:
2.C#代码:
///
///自动根据参数调整图像大小
///
publicvoidFit()
{
//计算字体距离
intFontSpace=FontSize+5;
//计算图像边距
floatfltSpace=Math.Min(Width/6,Height/6);
XSpace=fltSpace;
YSpace=fltSpace;
//计算X轴刻度宽度
XSlice=(Width-2*XSpace)/(Keys.Length-1);
//计算Y轴刻度宽度和Y轴刻度开始值
floatfltMinValue=0;
floatfltMaxValue=0;
for(inti=0;i { if(Values[i] { fltMinValue=Values[i]; } elseif(Values[i]>fltMaxValue) { fltMaxValue=Values[i]; } } if(YSliceBegin>fltMinValue) { YSliceBegin=fltMinValue; } intintYSliceCount=(int)(fltMaxValue/YSliceValue); if(fltMaxValue%YSliceValue! =0) { intYSliceCount++; } YSlice=(Height-2*YSpace)/intYSliceCount; } 3.数据缩小一个级别的效果: 4.完整代码DrawingCurve.cs: usingSystem; usingSystem.Collections.Generic; usingSystem.Text; usingSystem.Drawing; usingSystem.Data; usingSystem.Drawing.Drawing2D; namespaceSarchPMS.Business.Draw { publicclassDrawingCurve: DrawingChart { /// ///画曲线图 /// /// /// publicoverrideBitmapDrawImage(DataSetdsParameter) { Curve2Dcuv2D=newCurve2D(); cuv2D.Fit(); returncuv2D.CreateImage(); } } publicclassCurve2D { privateGraphicsobjGraphics;//Graphics类提供将对象绘制到显示设备的方法 privateBitmapobjBitmap;//位图对象 privatefloatfltWidth=480;//图像宽度 privatefloatfltHeight=248;//图像高度 privatefloatfltXSlice=50;//X轴刻度宽度 privatefloatfltYSlice=50;//Y轴刻度宽度 privatefloatfltYSliceValue=20;//Y轴刻度的数值宽度 privatefloatfltYSliceBegin=0;//Y轴刻度开始值 privatefloatfltTension=0.5f; privatestringstrTitle="曲线图";//标题 privatestringstrXAxisText="月份";//X轴说明文字 privatestringstrYAxisText="万元";//Y轴说明文字 privatestring[]strsKeys=newstring[]{"一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"};//键 privatefloat[]fltsValues=newfloat[]{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};//值 privateColorclrBgColor=Color.Snow;//背景色 privateColorclrTextColor=Color.Black;//文字颜色 privateColorclrBorderColor=Color.Black;//整体边框颜色 privateColorclrAxisColor=Color.Black;//轴线颜色 privateColorclrAxisTextColor=Color.Black;//轴说明文字颜色 privateColorclrSliceTextColor=Color.Black;//刻度文字颜色 privateColorclrSliceColor=Color.Black;//刻度颜色 privatefloatfltXSpace=100f;//图像左右距离边缘距离 privatefloatfltYSpace=100f;//图像上下距离边缘距离 privateintintFontSize=9;//字体大小号数 privatefloatfltXRotateAngle=30f;//X轴文字旋转角度 privatefloatfltYRotateAngle=0f;//Y轴文字旋转角度 privateintintCurveSize=2;//曲线线条大小 privateintintFontSpace=0;//intFontSpace是字体大小和距离调整出来的一个比较适合的数字 #region公共属性 /// ///图像的宽度 /// publicfloatWidth { set { if(value<100) { fltWidth=100; } else { fltWidth=value; } } get { if(fltWidth<=100) { return100; } else { returnfltWidth; } } } /// ///图像的高度 /// publicfloatHeight { set { if(value<100) { fltHeight=100; } else { fltHeight=value; } } get { if(fltHeight<=100) { return100; } else { returnfltHeight; } } } /// ///X轴刻度宽度 /// publicfloatXSlice { set{fltXSlice=value;} get{returnfltXSlice;} } /// ///Y轴刻度宽度 /// publicfloatYSlice { set{fltYSlice=value;} get{returnfltYSlice;} } /// ///Y轴刻度的数值宽度 /// publicfloatYSliceValue { set{fltYSliceValue=value;} get{returnfltYSliceValue;} } /// ///Y轴刻度开始值 /// publicfloatYSliceBegin { set{fltYSliceBegin=value;} get{returnfltYSliceBegin;} } /// ///张力系数 /// publicfloatTension { set { if(value<0.0f&&value>1.0f) { fltTension=0.5f; } else { fltTension=value; } } get { returnfltTension; } } /// ///标题 /// publicstringTitle { set{strTitle=value;} get{returnstrTitle;} } /// ///键,X轴数据 /// publicstring[]Keys { set{strsKeys=value;} get{returnstrsKeys;} } /// ///值,Y轴数据 /// publicfloat[]Values { set{fltsValues=value;} get{returnfltsValues;} } /// ///背景色 /// publicColorBgColor { set{clrBgColor=value;} get{returnclrBgColor;} } /// ///文字颜色 /// publicColorTextColor { set{clrTextColor=value;} get{returnclrTextColor;} } /// ///整体边框颜色 /// publicColorBorderColor { set{clrBorderColor=value;} get{returnclrBorderColor;} } /// ///轴线颜色 /// publicColorAxisColor { set{clrAxisColor=value;} get{returnclrAxisColor;} } /// ///X轴说明文字 /// publicstringXAxisText { set{strXAxisText=value;} get{returnstrXAxisText;} } /// ///Y轴说明文字 /// publicstringYAxisText { set{strYAxisText=value;} get{returnstrYAxisText;} } /// ///轴说明文字颜色 /// publicColorAxisTextColor { set{clrAxisTextColor=value;} get{returnclrAxisTextColor;} } /// ///刻度文字颜色 /// publicColorSliceTextColor { set{clrSliceTextColor=value;} get{returnclrSliceTextColor;} } /// ///刻度颜色 /// publicColorSliceColor { set{clrSliceColor=value;} get{returnclrSliceColor;} } /// ///曲线颜色 /// publicColor[]CurveColors { set{clrsCurveColors=value;} get{returnclrsCurveColors;} } /// ///X轴文字旋转角度 /// publicfloatXRotateAngle { get{returnfltXRotateAngle;} set{fltXRotateAngle=value;} } /// ///Y轴文字旋转角度 /// publicfloatYRotateAngle { get{returnfltYRotateAngle;} set{fltYRotateAngle=value;} } /// ///图像左右距离边缘距离 /// publicfloatXSpace { get{returnfltXSpace;} set{fltXSpace=value;} } /// ///图像上下距离边缘距离 /// publicfloatYSpace { get{returnfltYSpace;} set{fltYSpace=value;} } /// ///字体大小号数 /// publicintFontSize { get{returnintFontSize;} set{intFontSize=value;} } /// ///曲线线条大小 /// publicintCurveSize { get{returnintCurveSize;} set{intCurveSize=value;} } #endregion /// ///自动根据参数调整图像大小 /// publicvoidFit() { //计算字体距离 intFontSpace=FontSize+5; //计算图像边距 floatfltSpace=Math.Min(Width/6,Height/6); XSpace=fltSpace; YSpace=fltSpace; //计算X轴刻度宽度 XSlice=(Width-2*XSpace)/(Keys.Length-1); //计算Y轴刻度宽度和Y轴刻度开始值 floatfltMinValue=0; floatfltMaxValue=0; for(inti=0;i { if(Values[i] { fltMinValue=Values[i]; } elseif(Values[i]>fltMaxValue) { fltMaxValue=Values[i]; } } if(YSliceBegin>fltMinValue) { YSliceBegin=fltMinValue; } intintYSliceCount=(int)(fltMaxValue/YSliceValue); if(fltMaxValue%YSliceValue! =0) { intYSliceCount++; } YSlice=(Height-2*YSpace)/intYSliceCount; } /// ///生成图像并返回bmp图像对象 /// /// publicBitmapCreateImage() { InitializeGraph(); intintKeysCount=Keys.Length; intintValuesCount=Values.Length; if(intValuesCount%intKeysCount==0) { intintCurvesCount=intValuesCount/intKeysCount; for(inti=0;i { float[]fltCurrentValues=newfloat[intKeysCount]; for(intj=0;j { fltCurrentValues[j]=Values[i*intKeysCount+j]; } DrawContent(refobjGraphics,fltCurrentValues,clrsCurveColors[i]); } } else { objGraphics.DrawString("发生错误,Values的长度必须是Keys的整数倍! ",newFont("宋体",FontSize+5),newSolidBrush(TextColor),newPoint((int)XSpace,(int)(Height/2))); } returnobjBitmap; } /// ///初始化和填充图像区域,画出边框,初始标题 /// privatevoidInitializeGraph() { //根据给定的高度和宽度创建一个位图图像 objBitmap=newBitmap((int)Width,(int)Height); //从指定的objBitmap对象创建objGraphics对象(即在objBitmap对象中画图) objGraphics=Graphics.FromImage(objBitmap); //根据给定颜色(LightGray)填充图像的矩形区域(背景) objGraphics.DrawRectangle(newPen(BorderColor,1),0,0,Width-1,Height-1);//画边框 objGraphics.FillRectangle(newSolidBrush(BgColor),1,1,Width-2,Height-2);//填充边框 //画X轴,注意图像的原始X轴和Y轴计算是以左上角为原点,向右和向下计算的 floatfltX1=XSpace; floatfltY1=Height-YSpace; floatfltX2=Width-XSpace+XSlice/2; floatfltY2=fltY1; objGraphics.DrawLine(newPen(newSolidBrush(AxisColor),1),fltX1,fltY1,fltX2,fltY2); //画Y轴 fltX1=XSpace; fltY1=Height-YSpace; fltX2=XSpace; fltY2=YSpace-YSlice/2; objGraphics.DrawLine(newPen(newSolidBrush(AxisColor),1),fltX1,fltY1,fltX2,fltY2); //初始化轴线说明文字 SetAxisText(refobjGraphics); //初始化X轴上的刻度和文字 SetXAxis(refobjGraphics); //初始化Y轴上的刻度和文字 SetYAxis(refobjGraphics); //初始化标题 CreateTitle(refobjGraphics); } /// ///初始化轴线说明文字 /// /// privatevoidSetAxisText(refGraphicsobjGraphics) { floatfltX=Width-XSpace+XSlice/2-(XAxisText.Length-1)*intFontSpace; floatfltY=Height-YSpace-intFontSpace; objGraphics.DrawString(XAxisText,newFont("宋体",FontSize),newSolidBrush(AxisTextColor),fltX,fltY); fltX=XSpace+5; fltY=YSpace-YSlice/2-intFontSpace; for(inti=0;i { objGraphics.DrawString(YAxisText[i].ToString(),newFont("宋体",FontSize),newSolidBrush(AxisTextColor),fltX,fltY);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 绘制 曲线 分析