C#手动写代码实现统计图_第1页
C#手动写代码实现统计图_第2页
C#手动写代码实现统计图_第3页
C#手动写代码实现统计图_第4页
C#手动写代码实现统计图_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1. usingSystem;2. usingSystem.Collections.Generic;3. usingSystem.Linq;4. usingSystem.Text;5. /6. usingSystem.Drawing;7. /8. namespaceDatePrint9. 10. /11. /根据统计数据,输出各种统计统计图形,包括饼状图、曲线分析图、柱形图、多组数据曲线分析图;12. /统计图形统一大小:600*420;13. /开发人员:#;14. /开发时间:#;15. /16. publicclassCountImage17. 18. #region/颜色,画框,19. /20. /生成随机颜色21. /22. /23. privatestaticColorGetRandomColor(intseed)24. 25. Randomrandom=newRandom(seed);26. intr=0;27. intg=0;28. intb=0;29. r=random.Next(0,230);30. g=random.Next(0,230);31. b=random.Next(0,235);32. Colorrandomcolor=Color.FromArgb(r,g,b);33. returnrandomcolor;34. 35. /36. /绘制区域框,框何其阴影37. /38. /图形39. /矩形框对象40. /图形41. privatestaticBitmapDrawRectangle(Bitmapimage,Rectanglerect)42. 43. BitmapImage=image;44. Graphicsg=Graphics.FromImage(Image);45. g.TextRenderingHint=System.Drawing.Text.TextRenderingHint.AntiAlias;46. g.SmoothingMode=System.Drawing.Drawing2D.SmoothingMode.AntiAlias;47. try48. 49. Rectanglern=newRectangle(rect.X+3,rect.Y+3,rect.Width,rect.Height);50. SolidBrushbrush1=newSolidBrush(Color.FromArgb(233,234,249);51. SolidBrushbrush2=newSolidBrush(Color.FromArgb(221,213,215);52. /53. g.FillRectangle(brush2,rn);54. g.FillRectangle(brush1,rect);55. returnImage;56. 57. finally58. 59. g.Dispose();60. 61. 62. #endregion63. #region/绘制图例框,绘制扇形64. /65. /绘制图例信息66. /67. /图像68. /第一个矩形框69. /颜色70. /图例说明文字71. /文字样式72. /图例说明序号73. /图形74. privatestaticBitmapDrawDes(Bitmapimage,Rectanglerect,Colorc,stringDesStr,Fontf,inti)75. 76. BitmapImage=image;77. Graphicsg=Graphics.FromImage(Image);78. g.TextRenderingHint=System.Drawing.Text.TextRenderingHint.AntiAlias;79. g.SmoothingMode=System.Drawing.Drawing2D.SmoothingMode.AntiAlias;80. try81. 82. SolidBrushbrush=newSolidBrush(c);83. /84. RectangleR=newRectangle(rect.X,rect.Y+18*i,rect.Width,rect.Height);85. Pointp=newPoint(rect.X+12,rect.Y+18*i);86. /颜色矩形框87. g.FillRectangle(brush,R);88. /文字说明89. g.DrawString(DesStr,f,newSolidBrush(Color.Black),p);90. returnImage;91. 92. finally93. 94. g.Dispose();95. 96. 97. /绘制扇形98. privatestaticBitmapDrawPie(Bitmapimage,Rectanglerect,Colorc,intAngle1,intAngle2)99. 100. BitmapImage=image;101. Graphicsg=Graphics.FromImage(Image);102. g.TextRenderingHint=System.Drawing.Text.TextRenderingHint.AntiAlias;103. g.SmoothingMode=System.Drawing.Drawing2D.SmoothingMode.AntiAlias;104. try105. 106. SolidBrushbrush=newSolidBrush(c);107. /108. RectangleR=newRectangle(rect.X,rect.Y,rect.Width,rect.Height);109. g.FillPie(brush,R,Angle1,Angle2);110. returnImage;111. 112. finally113. 114. g.Dispose();115. 116. 117. #endregion118. #region/绘制基本图形119. /120. /生成图片,统一设置图片大小、背景色,图片布局,及标题121. /122. /图片123. privatestaticBitmapGenerateImage(stringTitle)124. 125. /图片大小:宽度、高度126. intwidth=600;127. intheight=420;128. /标题129. PointPTitle=newPoint(30,20);130. Fontf1=newFont(宋体,10,FontStyle.Bold);131. /线132. PointPLine1=newPoint(20,40);133. PointPLine2=newPoint(390,40);134. Penpen=newPen(newSolidBrush(Color.FromArgb(8,34,231),1.5f);135. /主区域,主区域图形136. RectangleRMain1=newRectangle(20,55,410,345);137. RectangleRMain2=newRectangle(25,60,400,335);138. /图例区域139. RectangleRDes1=newRectangle(440,55,150,345);140. /图例说明141. stringDes=图例说明:;142. Fontf2=newFont(新宋体,9,FontStyle.Bold);143. PointPDes=newPoint(445,65);144. /图例信息,后面的x坐标上累加20145. RectangleRDes2=newRectangle(445,90,10,10);146. Bitmapimage=newBitmap(width,height);147. /148. Graphicsg=Graphics.FromImage(image);149. g.TextRenderingHint=System.Drawing.Text.TextRenderingHint.AntiAlias;150. g.SmoothingMode=System.Drawing.Drawing2D.SmoothingMode.AntiAlias;151. try152. 153. /设置背景色、绘制边框154. g.Clear(Color.White);155. g.DrawRectangle(newPen(Color.Black),0,0,width-1,height-1);156. /绘制标题、线157. g.DrawString(Title,f1,newSolidBrush(Color.Black),PTitle);158. g.DrawLine(pen,PLine1,PLine2);159. 160. /主区域161. image=DrawRectangle(image,RMain1);162. /图例区域163. image=DrawRectangle(image,RDes1);164. /“图例说明”165. g.DrawString(Des,f2,newSolidBrush(Color.Black),PDes);166. /return167. returnimage;168. 169. finally170. 171. g.Dispose();172. 173. 174. #endregion175. #region/绘制饼状图*176. /177. /计算数值综合178. /179. /180. /181. privatestaticdecimalSum(decimalValue)182. 183. decimalt=0;184. foreach(decimaldinValue)185. 186. t+=d;187. 188. returnt;189. 190. /191. /计算各项比例192. /193. /194. /195. privatestaticdecimalGetItemRate(decimalValue)196. 197. decimalsum=Sum(Value);198. decimalItemRate=newdecimalValue.Length;199. for(inti=0;iValue.Length;i+)200. 201. ItemRatei=Valuei/sum;202. 203. returnItemRate;204. 205. /206. /根据比例,计算各项角度值207. /208. /209. /210. privatestaticintGetItemAngle(decimalItemRate)211. 212. intItemAngel=newintItemRate.Length;213. for(inti=0;iItemRate.Length;i+)214. 215. decimalt=360*ItemRatei;216. ItemAngeli=Convert.ToInt32(t);217. 218. returnItemAngel;219. 220. /221. /绘制饼图(主要是分析不同类型的数值所占比例),参数有图的标题,项目名称,项目的数值,名称和数值都是长度对应的222. /223. /图的标题224. /项目名称225. /项目的数值226. /Bitmap图形227. publicstaticBitmapGetPieImage(stringTitle,stringItemName,decimalItemValue)228. 229. Bitmapimage=GenerateImage(Title);230. /231. /主区域图形232. RectangleRMain=newRectangle(35,70,380,300);233. /图例信息234. RectangleRDes=newRectangle(445,90,10,10);235. Fontf=newFont(新宋体,9,FontStyle.Bold);236. Graphicsg=Graphics.FromImage(image);237. g.TextRenderingHint=System.Drawing.Text.TextRenderingHint.AntiAlias;238. g.SmoothingMode=System.Drawing.Drawing2D.SmoothingMode.AntiAlias;239. try240. 241. /分析数据,绘制饼图和图例说明242. decimalItemRate=GetItemRate(ItemValue);243. intItemAngle=GetItemAngle(ItemRate);244. intAngle1=0;245. intAngle2=0;246. intlen=ItemValue.Length;247. Colorc=newColor();248. /3D249. g.DrawPie(newPen(Color.Black),RMain,0F,360F);250. g.DrawPie(newPen(Color.Black),newRectangle(RMain.X,RMain.Y+10,RMain.Width,RMain.Height),0F,360F);251. g.FillPie(newSolidBrush(Color.Black),newRectangle(RMain.X,RMain.Y+10,RMain.Width,RMain.Height),0F,360F);252. /绘制253. for(inti=0;ilen;i+)254. 255. Angle2=ItemAnglei;256. /if(c!=GetRandomColor(i)257. c=GetRandomColor(i);258. SolidBrushbrush=newSolidBrush(c);259. stringDesStr=ItemNamei+(+(ItemRatei*100).ToString(.00)+%+)+ItemValuei.ToString(.00);260. /261. DrawPie(image,RMain,c,Angle1,Angle2);262. Angle1+=Angle2;263. DrawDes(image,RDes,c,DesStr,f,i);264. 265. returnimage;266. 267. finally268. 269. g.Dispose();270. 271. 272. #endregion273. #region/获取Y轴坐标数据274. /*275. 坐标轴实现算法描述:276. *X轴坐标根据项目数量把X轴均等分,有效长度350,277. *Y轴有效长度280,平分为10个等分,即有十个点;278. *Y轴的数值算法:第一个点位最小值,然后每个等分所对应的值是(最大值-最小值)/9,279. */280. /281. /获取Y轴坐标的点分布值282. /283. /项目数值284. /Y轴点的数量285. /图形286. privatestaticintGetYValue(decimalItemValue,intYCount)287. 288. intlen=ItemValue.Length;289. intValue=newintYCount;290. intMax=Convert.ToInt32(ItemValue.Max();291. intMin=Convert.ToInt32(ItemValue.Min();292. intDistance=Convert.ToInt32(Max-Min)/(YCount-1);293. for(inti=0;iYCount;i+)294. 295. Valuei=Min+Distance*i;296. 297. /ValueYCount-1=Max;298. returnValue;299. 300. #endregion301. #region/建立坐标轴302. /303. /绘制坐标轴,X、Y轴的坐标值304. /305. /图像306. /项目名称307. /项目数值308. /图像309. privatestaticBitmapDrawCoordinate(Bitmapimage,stringItemName,decimalItemValue)310. 311. /坐标轴312. PointP0=newPoint(60,360);313. PointPx=newPoint(420,360);314. PointPy=newPoint(60,65);315. Penpen=newPen(Color.Black);316. /箭头317. PointPy1=newPoint(58,70);318. PointPy2=newPoint(62,70);319. PointPx1=newPoint(415,358);320. PointPx2=newPoint(415,362);321. /Y,XValue322. /y280-10323. intYCount=10;/Y轴点的数量324. intYDistance=Convert.ToInt32(280/YCount);/Y轴点击的距离325. intYValue=GetYValue(ItemValue,YCount);326. intlen=3;/短线的长度327. intXCount=ItemName.Length;/X轴点的数量328. intXDistance=Convert.ToInt32(350/XCount);/X轴点间的距离329. /330. Fontf=newFont(新宋体,8,FontStyle.Bold);331. /Image332. Graphicsg=Graphics.FromImage(image);333. g.TextRenderingHint=System.Drawing.Text.TextRenderingHint.AntiAlias;334. g.SmoothingMode=System.Drawing.Drawing2D.SmoothingMode.AntiAlias;335. try336. 337. /绘制坐标轴线338. g.DrawLine(pen,P0,Px);339. g.DrawLine(pen,P0,Py);340. /箭头341. g.DrawLine(pen,Py,Py1);342. g.DrawLine(pen,Py,Py2);343. g.DrawLine(pen,Px,Px1);344. g.DrawLine(pen,Px,Px2);345. /X346. for(inti=1;i=XCount;i+)347. 348. Pointpl1=newPoint(P0.X+i*XDistance,P0.Y);349. Pointpl2=newPoint(P0.X+i*XDistance,P0.Y-len);350. stringstr=ItemNamei-1;351. Pointps=newPoint(pl1.X-(str.Length*8),pl1.Y+5);352. g.DrawLine(pen,pl1,pl2);353. g.DrawString(str,f,newSolidBrush(Color.Black),ps);354. 355. /Y356. for(inti=1;i=YCount;i+)357. 358. Pointpl1=newPoint(P0.X,P0.Y-YDistance*i);359. Pointpl2=newPoint(pl1.X+len,pl1.Y);360. stringstr=YValuei-1.ToString();361. Pointps=newPoint(pl1.X-str.Length*8,pl1.Y-5);362. g.DrawLine(pen,pl1,pl2);363. g.DrawString(str,f,newSolidBrush(Color.Black),ps);364. 365. /0366. g.DrawString(0,f,newSolidBrush(Color.Black),newPoint(P0.X-10,P0.Y-10);367. /return368. returnimage;369. 370. finally371. 372. g.Dispose();373. 374. 375. #endregion376. 377. #region/获取某个数值在坐标系中的位置378. /379. /获取某个数值在坐标系中的位置380. /381. /当前数值382. /所有数值383. /位置384. privatestaticintGetCoordinateValue(decimalValue,decimalItemValue)385. 386. /y280-10387. /getyvalue388. intYValue=GetYValue(ItemValue,10);389. intMax=YValue.Max();390. intMin=YValue.Min();391. floatAvgDis=(Max-Min)/9;392. floattt=(Convert.ToSingle(Value)-Min)/AvgDis;393. intm=Convert.ToInt32(tt*28);394. m=360-28-m;395. /if(Convert.ToInt32(Value)=Max)396. /m=80;397. /elseif(Convert.ToInt32(Value)=Min)398. /m=332;399. returnm;400. 401. #endregion402. #region/绘制曲线图*403. /404. /绘制曲线图(主要是分析不同类型的数值所占比例,或者同意项目不同状态下的值和趋势),参数有图的标题,项目名称,项目的数值,名称和数值都是长度对应的405. /406. /图的标题4

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论