1. using System;
  2. using System.IO;//用于文件存取
  3. using System.Data;//用于数据访问
  4. using System.Drawing;//提供画GDI+图形的基本功能
  5. using System.Drawing.Text;//提供画GDI+图形的高级功能
  6. using System.Drawing.Drawing2D;//提供画高级二维,矢量图形功能
  7. using System.Drawing.Imaging;//提供画GDI+图形的高级功能
  8. namespace BaseLayer
  9. {
  10. public class PieChart
  11. {
  12. public PieChart()
  13. {
  14. }
  15.  
  16. //Render是图形大标题,图开小标题,图形宽度,图形长度,饼图的数据集和饼图的数据集要表示出来的数据
  17.  
  18. public Image Render(string title, string subTitle, int width, int height, DataSet chartData,int DataLine)
  19. {
  20. const int SIDE_LENGTH = ;
  21. const int PIE_DIAMETER = ;
  22. DataTable dt = chartData.Tables[];
  23.  
  24. //通过输入参数,取得饼图中的总基数
  25. float sumData = ;
  26. foreach(DataRow dr in dt.Rows)
  27. {
  28. sumData += Convert.ToSingle(dr[DataLine]);
  29. }
  30. //产生一个image对象,并由此产生一个Graphics对象
  31. Bitmap bm = new Bitmap(width,height);
  32. Graphics g = Graphics.FromImage(bm);
  33. //设置对象g的属性
  34. g.ScaleTransform((Convert.ToSingle(width))/SIDE_LENGTH,(Convert.ToSingle(height))/SIDE_LENGTH);
  35. g.SmoothingMode = SmoothingMode.Default;
  36. g.TextRenderingHint = TextRenderingHint.AntiAlias;
  37.  
  38. //画布和边的设定
  39. g.Clear(Color.White);
  40. g.DrawRectangle(Pens.Black,,,SIDE_LENGTH-,SIDE_LENGTH-);
  41. //画饼图标题
  42. g.DrawString(title,new Font("Tahoma",),Brushes.Black,new PointF(,));
  43. //画饼图的图例
  44. g.DrawString(subTitle,new Font("Tahoma",),Brushes.Black,new PointF(,));
  45. //画饼图
  46. float curAngle = ;
  47. float totalAngle = ;
  48. for(int i=;i<dt.Rows.Count;i++)
  49. {
  50. curAngle = Convert.ToSingle(dt.Rows[i][DataLine]) / sumData * ;
  51.  
  52. g.FillPie(new SolidBrush(ChartUtil.GetChartItemColor(i)),,,PIE_DIAMETER,PIE_DIAMETER,totalAngle,curAngle);
  53. g.DrawPie(Pens.Black,,,PIE_DIAMETER,PIE_DIAMETER,totalAngle,curAngle);
  54. totalAngle += curAngle;
  55. }
  56. //画图例框及其文字
  57. g.DrawRectangle(Pens.Black,,,,);
  58. g.DrawString("图表说明",new Font("Tahoma",,FontStyle.Bold),Brushes.Black,new PointF(,));
  59.  
  60. //画图例各项
  61. PointF boxOrigin = new PointF(,);
  62. PointF textOrigin = new PointF(,);
  63. float percent = ;
  64. for(int i=;i<dt.Rows.Count;i++)
  65. {
  66. g.FillRectangle(new SolidBrush(ChartUtil.GetChartItemColor(i)),boxOrigin.X,boxOrigin.Y,,);
  67. g.DrawRectangle(Pens.Black,boxOrigin.X,boxOrigin.Y,,);
  68. percent = Convert.ToSingle(dt.Rows[i][DataLine]) / sumData * ;
  69. g.DrawString(dt.Rows[i][].ToString() + " - " + dt.Rows[i][].ToString() + " (" + percent.ToString("") + "%)",new Font("Tahoma",),Brushes.Black,textOrigin);
  70. boxOrigin.Y += ;
  71. textOrigin.Y += ;
  72. }
  73. //回收资源
  74. g.Dispose();
  75. return (Image) bm;
  76.  
  77. }
  78. }
  79.  
  80. //画条形图
  81. public class BarChart
  82. {
  83. public BarChart()
  84. {
  85. }
  86.  
  87. //Render是图形大标题,图开小标题,图形宽度,图形长度,饼图的数据集和饼图的数据集
  88. public Image Render(string title, string subTitle, int width, int height, DataSet chartData)
  89. {
  90. const int SIDE_LENGTH = ;
  91. const int CHART_TOP = ;
  92. const int CHART_HEIGHT = ;
  93. const int CHART_LEFT = ;
  94. const int CHART_WIDTH = ;
  95. DataTable dt = chartData.Tables[];
  96.  
  97. //计算最高的点
  98. float highPoint = ;
  99. foreach(DataRow dr in dt.Rows)
  100. {
  101. if(highPoint<Convert.ToSingle(dr[]))
  102. {
  103. highPoint = Convert.ToSingle(dr[]);
  104.  
  105. }
  106. }
  107. //建立一个Graphics对象实例
  108. Bitmap bm = new Bitmap(width,height);
  109. try
  110. {
  111. Graphics g = Graphics.FromImage(bm);
  112. //设置条图图形和文字属性
  113. g.ScaleTransform((Convert.ToSingle(width))/SIDE_LENGTH,(Convert.ToSingle(height))/SIDE_LENGTH);
  114. g.SmoothingMode = SmoothingMode.Default;
  115. g.TextRenderingHint = TextRenderingHint.AntiAlias;
  116.  
  117. //设定画布和边
  118. g.Clear(Color.White);
  119. g.DrawRectangle(Pens.Black,,,SIDE_LENGTH-,SIDE_LENGTH-);
  120. //画大标题
  121. g.DrawString(title,new Font("Tahoma",),Brushes.Black,new PointF(,));
  122. //画小标题
  123. g.DrawString(subTitle,new Font("Tahoma",),Brushes.Black,new PointF(,));
  124. //画条形图
  125. float barWidth = CHART_WIDTH / (dt.Rows.Count * );
  126. PointF barOrigin = new PointF(CHART_LEFT + (barWidth / ),);
  127. float barHeight = dt.Rows.Count;
  128. for(int i=;i<dt.Rows.Count;i++)
  129. {
  130. barHeight = Convert.ToSingle(dt.Rows[i][]) * / highPoint * ;
  131. barOrigin.Y = CHART_TOP + CHART_HEIGHT - barHeight;
  132. g.FillRectangle(new SolidBrush(ChartUtil.GetChartItemColor(i)),barOrigin.X,barOrigin.Y,barWidth,barHeight);
  133. barOrigin.X = barOrigin.X + (barWidth * );
  134. }
  135. //设置边
  136. g.DrawLine(new Pen(Color.Black,),new Point(CHART_LEFT,CHART_TOP),new Point(CHART_LEFT,CHART_TOP + CHART_HEIGHT));
  137. g.DrawLine(new Pen(Color.Black,),new Point(CHART_LEFT,CHART_TOP + CHART_HEIGHT),new Point(CHART_LEFT + CHART_WIDTH,CHART_TOP + CHART_HEIGHT));
  138. //画图例框和文字
  139. g.DrawRectangle(new Pen(Color.Black,),,,,);
  140. g.DrawString("图表说明",new Font("Tahoma",,FontStyle.Bold),Brushes.Black,new PointF(,));
  141.  
  142. //画图例
  143. PointF boxOrigin = new PointF(,);
  144. PointF textOrigin = new PointF(,);
  145. for(int i=;i<dt.Rows.Count;i++)
  146. {
  147. g.FillRectangle(new SolidBrush(ChartUtil.GetChartItemColor(i)),boxOrigin.X,boxOrigin.Y,,);
  148. g.DrawRectangle(Pens.Black,boxOrigin.X,boxOrigin.Y,,);
  149. g.DrawString(dt.Rows[i][].ToString() + " - " + dt.Rows[i][].ToString(),new Font("Tahoma",),Brushes.Black,textOrigin);
  150. boxOrigin.Y += ;
  151. textOrigin.Y += ;
  152. }
  153. //输出图形
  154. g.Dispose();
  155. return bm;
  156. }
  157. catch
  158. {
  159. return bm;
  160. }
  161. }
  162. }
  163. public class ChartUtil
  164. {
  165. public ChartUtil()
  166. {
  167. }
  168. public static Color GetChartItemColor(int itemIndex)
  169. {
  170. Color selectedColor;
  171. switch(itemIndex)
  172. {
  173. case :
  174. selectedColor = Color.Blue;
  175. break;
  176. case :
  177. selectedColor = Color.Red;
  178. break;
  179. case :
  180. selectedColor = Color.Yellow;
  181. break;
  182. case :
  183. selectedColor = Color.Purple;
  184. break;
  185. default:
  186. selectedColor = Color.Green;
  187. break;
  188. }
  189. return selectedColor;
  190. }
  191. }
  192. }

C#的WinForm中制作饼状图和柱状图的更多相关文章

  1. jasper(二):制作饼状图和柱状图

    在新建一个框架之后 我们也是要执行 add dataset,来添加一个链接数据库的语句,因为这是个饼状图,所以要用group by 全部放入右边的框架 点完成 接下来,就是要创建饼状图,就要点击 窗口 ...

  2. arcgis api for flex之专题图制作(饼状图,柱状图等)

    最近公司给我一个任务,就是利用arcgis api for flex实现在地图上点(业务数据)直接显示饼状图以及柱状图的专题图制作,而不是通过点击点显示气泡窗口的形式来实现,这个公司已经实现了. 经过 ...

  3. FusionCharts数据展示成饼状图、柱状图和折线图

    FusionCharts数据展示成饼状图.柱状图和折线图 本文以展示柱状图为例进行介绍,当然这仅仅是一种方法而已:还有很多方法可以用于展示图表,例如echarts,自定义图表标签.使用jfreecha ...

  4. 封装构造函数,用canvas写饼状图和柱状图

    封装构造函数,用canvas写饼状图和柱状图 封装函数 // 场景 function XDLScence( options ) { this.stage = options.stage; //执行场景 ...

  5. C#应用NPOI实现导出EXcel表格中插入饼状图(可实现动态数据生成)

    一.思路:   1.excel是可以通过NPOI插入图片的: 2.C#通过NPOI生成饼状图: 3.把生成的饼状图以字节流的形式插入到表格 二.看代码: #region 生成饼图图例 /// < ...

  6. JFreeChart框架中生成饼状图上怎样显示数据 [问题点数:40分,结帖人GreenLawn]

    我用JFreeChart框架生成饼状图,但想把数据信息在饼图上显示,是在饼图内部(即圆内)显示!怎样实现啊??  去掉lablepieplot.setLabelGenerator(null);去掉线p ...

  7. Winform 后台生成饼状图并保存为图片

    .cs代码如下 string ldt_picPath = System.Windows.Forms.Application.StartupPath + @"Pic\" + Item ...

  8. Java-jfree报表(学习整理)----饼状图、柱状图、折线统计图

    1.使用的报表工具: jfree报表 2.下载网址: http://www.jfree.org/ 下载之后先解压:如下图 下载后:需要的jar包!如下图: 打开:找到以下的两个jar包 再导入开发项目 ...

  9. PHP实现动态生成饼状图、柱状图和折线图(转载)

    PHP在图像操作方面的表现非常出色,我们只需借助可以免费得到的GD库便可以轻松实现图.表勾画.下面将分别介绍PHP实现的饼状图.折线图和柱状图以 及他们的使用方法,这几段代码的特点就是不需要再把它们复 ...

随机推荐

  1. Golang官方图片库

    Golang 的图片出来通过提供操作每一个像素点设置颜色(http://www.cnblogs.com/ghj1976/p/3441536.html) 和 提供通过可选蒙版图片重叠操作 (http:/ ...

  2. ZOJ 2599 Graduated Lexicographical Ordering (数位DP)

    首先要吐两行槽:看到集训队论文上有这道题,由于数位DP一律写成记忆化搜索形式的强迫症,就没去看论文上的几个函数是什么……:结果被这道题虐的脑细胞死光……,最后是用随机数据对拍AC程序然后发现BUG改掉 ...

  3. 白盒测试之初识gtest工具

    因为公司最近对软件产品质量提高了要求,之前项目组中黑盒测试方法就越来越无法满足公司的要求.虽然作为研发,但是也要求对白盒测试有一个系统的了解(毕竟之前没有系统的接触过白盒测试). 单元测试工具有很多种 ...

  4. html --- VML --- javascript --- 旋转矩形

    矢量标记语言 --- Vector Markup Language 运行它的代码需要打开IE的兼容性视图 如有疑问请参考:http://msdn.microsoft.com/en-us/library ...

  5. 开扒php内核函数,第一篇 bin2hex

    这段时间真的比较有时间,所以自己用c写一下bin2hex啦 写个php的人都知道,这是个比较熟悉的函数吧,没有什么高深,只是把输入的东西以16进制输出吧了 先分析一下,这个函数要怎么写吧,他会有一定的 ...

  6. erlang 常用函数

    os:getpid() 获得erl.exe的进程表示符 application:start(appname,    Type), Type == permanent 表示一个应用死了,其它应用全部死掉 ...

  7. QCon2013上海站总结 -- 整体印象和感悟

    基本情况: QCon 2013(http://www.qconshanghai.com/)上海站的活动一共为期3天(周五.六和日).活动在上海的光大会展中心举行的. QCon(全球软件开发者大会)是由 ...

  8. air for ios

    在 Adobe AIR 中为不同屏幕尺寸的多种设备提供支持 使用Flash Builder 4.5进行多平台游戏开发 手机屏幕触控技术与提升AIR在Android上的触控体验 AIR Native E ...

  9. CentOS7 network

  10. 服务器多块磁盘 ,同时磁盘类型混合(SSD+STAT+SAS)

    服务器多块磁盘 ,同时磁盘类型混合(SSD+STAT+SAS)