using System;
using System.IO;//用于文件存取
using System.Data;//用于数据访问
using System.Drawing;//提供画GDI+图形的基本功能
using System.Drawing.Text;//提供画GDI+图形的高级功能
using System.Drawing.Drawing2D;//提供画高级二维,矢量图形功能
using System.Drawing.Imaging;//提供画GDI+图形的高级功能
namespace BaseLayer
{
public class PieChart
{
public PieChart()
{
} //Render是图形大标题,图开小标题,图形宽度,图形长度,饼图的数据集和饼图的数据集要表示出来的数据 public Image Render(string title, string subTitle, int width, int height, DataSet chartData,int DataLine)
{
const int SIDE_LENGTH = ;
const int PIE_DIAMETER = ;
DataTable dt = chartData.Tables[]; //通过输入参数,取得饼图中的总基数
float sumData = ;
foreach(DataRow dr in dt.Rows)
{
sumData += Convert.ToSingle(dr[DataLine]);
}
//产生一个image对象,并由此产生一个Graphics对象
Bitmap bm = new Bitmap(width,height);
Graphics g = Graphics.FromImage(bm);
//设置对象g的属性
g.ScaleTransform((Convert.ToSingle(width))/SIDE_LENGTH,(Convert.ToSingle(height))/SIDE_LENGTH);
g.SmoothingMode = SmoothingMode.Default;
g.TextRenderingHint = TextRenderingHint.AntiAlias; //画布和边的设定
g.Clear(Color.White);
g.DrawRectangle(Pens.Black,,,SIDE_LENGTH-,SIDE_LENGTH-);
//画饼图标题
g.DrawString(title,new Font("Tahoma",),Brushes.Black,new PointF(,));
//画饼图的图例
g.DrawString(subTitle,new Font("Tahoma",),Brushes.Black,new PointF(,));
//画饼图
float curAngle = ;
float totalAngle = ;
for(int i=;i<dt.Rows.Count;i++)
{
curAngle = Convert.ToSingle(dt.Rows[i][DataLine]) / sumData * ; g.FillPie(new SolidBrush(ChartUtil.GetChartItemColor(i)),,,PIE_DIAMETER,PIE_DIAMETER,totalAngle,curAngle);
g.DrawPie(Pens.Black,,,PIE_DIAMETER,PIE_DIAMETER,totalAngle,curAngle);
totalAngle += curAngle;
}
//画图例框及其文字
g.DrawRectangle(Pens.Black,,,,);
g.DrawString("图表说明",new Font("Tahoma",,FontStyle.Bold),Brushes.Black,new PointF(,)); //画图例各项
PointF boxOrigin = new PointF(,);
PointF textOrigin = new PointF(,);
float percent = ;
for(int i=;i<dt.Rows.Count;i++)
{
g.FillRectangle(new SolidBrush(ChartUtil.GetChartItemColor(i)),boxOrigin.X,boxOrigin.Y,,);
g.DrawRectangle(Pens.Black,boxOrigin.X,boxOrigin.Y,,);
percent = Convert.ToSingle(dt.Rows[i][DataLine]) / sumData * ;
g.DrawString(dt.Rows[i][].ToString() + " - " + dt.Rows[i][].ToString() + " (" + percent.ToString("") + "%)",new Font("Tahoma",),Brushes.Black,textOrigin);
boxOrigin.Y += ;
textOrigin.Y += ;
}
//回收资源
g.Dispose();
return (Image) bm; }
} //画条形图
public class BarChart
{
public BarChart()
{
} //Render是图形大标题,图开小标题,图形宽度,图形长度,饼图的数据集和饼图的数据集
public Image Render(string title, string subTitle, int width, int height, DataSet chartData)
{
const int SIDE_LENGTH = ;
const int CHART_TOP = ;
const int CHART_HEIGHT = ;
const int CHART_LEFT = ;
const int CHART_WIDTH = ;
DataTable dt = chartData.Tables[]; //计算最高的点
float highPoint = ;
foreach(DataRow dr in dt.Rows)
{
if(highPoint<Convert.ToSingle(dr[]))
{
highPoint = Convert.ToSingle(dr[]); }
}
//建立一个Graphics对象实例
Bitmap bm = new Bitmap(width,height);
try
{
Graphics g = Graphics.FromImage(bm);
//设置条图图形和文字属性
g.ScaleTransform((Convert.ToSingle(width))/SIDE_LENGTH,(Convert.ToSingle(height))/SIDE_LENGTH);
g.SmoothingMode = SmoothingMode.Default;
g.TextRenderingHint = TextRenderingHint.AntiAlias; //设定画布和边
g.Clear(Color.White);
g.DrawRectangle(Pens.Black,,,SIDE_LENGTH-,SIDE_LENGTH-);
//画大标题
g.DrawString(title,new Font("Tahoma",),Brushes.Black,new PointF(,));
//画小标题
g.DrawString(subTitle,new Font("Tahoma",),Brushes.Black,new PointF(,));
//画条形图
float barWidth = CHART_WIDTH / (dt.Rows.Count * );
PointF barOrigin = new PointF(CHART_LEFT + (barWidth / ),);
float barHeight = dt.Rows.Count;
for(int i=;i<dt.Rows.Count;i++)
{
barHeight = Convert.ToSingle(dt.Rows[i][]) * / highPoint * ;
barOrigin.Y = CHART_TOP + CHART_HEIGHT - barHeight;
g.FillRectangle(new SolidBrush(ChartUtil.GetChartItemColor(i)),barOrigin.X,barOrigin.Y,barWidth,barHeight);
barOrigin.X = barOrigin.X + (barWidth * );
}
//设置边
g.DrawLine(new Pen(Color.Black,),new Point(CHART_LEFT,CHART_TOP),new Point(CHART_LEFT,CHART_TOP + CHART_HEIGHT));
g.DrawLine(new Pen(Color.Black,),new Point(CHART_LEFT,CHART_TOP + CHART_HEIGHT),new Point(CHART_LEFT + CHART_WIDTH,CHART_TOP + CHART_HEIGHT));
//画图例框和文字
g.DrawRectangle(new Pen(Color.Black,),,,,);
g.DrawString("图表说明",new Font("Tahoma",,FontStyle.Bold),Brushes.Black,new PointF(,)); //画图例
PointF boxOrigin = new PointF(,);
PointF textOrigin = new PointF(,);
for(int i=;i<dt.Rows.Count;i++)
{
g.FillRectangle(new SolidBrush(ChartUtil.GetChartItemColor(i)),boxOrigin.X,boxOrigin.Y,,);
g.DrawRectangle(Pens.Black,boxOrigin.X,boxOrigin.Y,,);
g.DrawString(dt.Rows[i][].ToString() + " - " + dt.Rows[i][].ToString(),new Font("Tahoma",),Brushes.Black,textOrigin);
boxOrigin.Y += ;
textOrigin.Y += ;
}
//输出图形
g.Dispose();
return bm;
}
catch
{
return bm;
}
}
}
public class ChartUtil
{
public ChartUtil()
{
}
public static Color GetChartItemColor(int itemIndex)
{
Color selectedColor;
switch(itemIndex)
{
case :
selectedColor = Color.Blue;
break;
case :
selectedColor = Color.Red;
break;
case :
selectedColor = Color.Yellow;
break;
case :
selectedColor = Color.Purple;
break;
default:
selectedColor = Color.Green;
break;
}
return selectedColor;
}
}
}

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. [转]linux之less命令

    转自:http://www.cnblogs.com/peida/archive/2012/11/02/2750588.html less 工具也是对文件或其它输出进行分页显示的工具,应该说是linux ...

  2. 增加duilib edit控件的提示功能和多种文字颜色

    转载请说明原出处,谢谢~~:http://blog.csdn.net/zhuhongshu/article/details/41786407 duilib的CEditUI控件内部使用了win32的原生 ...

  3. Jquery图片随滚动条加载

    很久以前的写的Jquery图片随滚动条加载,现在不是什么新技术,应用也很广泛,大大提高图片多的页面打开速度! 有需要的朋友看看吧!有什么意见或建议欢迎留言交流! Demo.html  源码: < ...

  4. 跨平台音乐播放器qmmp(Cross-Platform Audio Player Qmmp)

    开源多媒体播放器(Audio-Player),简洁的界面,最看重它的是跨平台的特性. 开源 跨平台(Linux.Windows) 简洁 支持音乐格式(mp3/ogg......) 全局快捷键 播放中打 ...

  5. 黑马程序员——Block数据类型

    Block数据类型,又被称为代码段.因为它可以封装一段代码.苹果官方建议多用block.因为在多线程控制.异步任务,集合遍历.集合排序.动画转场等方面用的很多. Block的特点: 1.Block 用 ...

  6. effective c++:virtual函数在构造函数和析构函数中的注意事项

    如不使用自动生成函数要明确拒绝 对于一个类,如果你没有声明,c++会自动生成一个构造函数,一个析构函数,一个copy构造函数和一个copy assignment操作符. class Empty { p ...

  7. 20 个超酷的 HTML5/CSS3 应用及源码

    [导读] 1.HTML5视频破碎重组特效,强大视觉冲击HTML5视频播放器很多,但是HTML5视频特效还是很少见的,这款HTML5视频破碎重组特效非常刺激,给人强大的视觉冲击.点击视频任意地方,HTM ...

  8. 轻松学习Linux之认识Shell

            Shell是一个命令解释器提供了用户与内核进行交互操作的一种接口shell,编程对於系统管理员或是一般使用者都相当有用,除了自动化,还可写出一些有趣的小工具,Linux本身有各种版本一 ...

  9. 第二百一十九天 how can I 坚持

    今天好冷,白天在家待了一天,晚上,老贾生日,生日快乐,去海底捞吃了个火锅,没感觉呢. 今天还发现了个好游戏,纪念碑谷,挺新颖,就是难度有点大了. 好累.睡觉,明天想去爬山啊,可是该死的天气.

  10. 個人最近做的最多的重複工作就是excel导出

    //导出事件,这个是有合并动态列的 double num1 = 0, num2 = 0, num3 = 0; protected void btnExcel_Click(object sender,  ...