C#如何实现画矩形图,饼状图

原创 2007年10月04日 21:05:00

      在用C#做报表类的网站的时候,很多时候需要一些图形来直观的表达数据所蕴含的信息,这些图形包括曲线图,矩形图,饼状图,  最近作了个项目,内容涉及到画CPK曲线,画某个时间段各个工站的产能图,良率图,以及每月的产能图。现贴出来跟大家一起分享。

画出的效果如下:

 

      画图常需要的命名空间是:using System.Drawing;

     画图主函数:

 private void DrawGraph()

  {
   // 在此处放置用户代码以初始化页面
   Graphics objGraphis;
   int width=600,height=300;
   Bitmap objBitMap=new Bitmap(width,height);//图片的大小
   objGraphis=Graphics.FromImage(objBitMap);
   objGraphis.Clear(Color.White);//设置图片背景颜色
   System.Drawing.Pen pen=new System.Drawing.Pen(Brushes.Black,2);//设置画笔的颜色粗细
   System.Drawing.Pen pen1=new System.Drawing.Pen(Brushes.Black,1);//设置画笔的颜色粗细
   //画图形的外框,这样会好看些
   objGraphis.DrawLine(pen,0,0,width,0);
   objGraphis.DrawLine(pen,0,0,0,height);
   objGraphis.DrawLine(pen,0,height,width,height);
   objGraphis.DrawLine(pen,width,height,width,0);

   int [] arrValues={0,0};
   arrValues[0]=90;//存放Pass的数量
   arrValues[1]=10;//存放Fail的数量
   
   //文字标识
   string[] arrValueNames={"0","0"};
   arrValueNames[0]="Pass";
   arrValueNames[1]="Fail";

   objGraphis.DrawString("产线生产情况统计",new Font("宋体",10),Brushes.Black,new PointF(10,10));

   PointF symbolLeg=new PointF(300,20);//标识图的起初位置
   //画标识图
   objGraphis.FillRectangle(Brushes.Green,symbolLeg.X,symbolLeg.Y,40,20);
   objGraphis.DrawRectangle(Pens.Black,symbolLeg.X,symbolLeg.Y,40,20);
   objGraphis.DrawString(arrValueNames[0],new Font("宋体",10),Brushes.Black,new PointF(350,20));

   objGraphis.FillRectangle(Brushes.Red,symbolLeg.X+100,symbolLeg.Y,40,20);
   objGraphis.DrawRectangle(Pens.Black,symbolLeg.X+100,symbolLeg.Y,40,20);
   objGraphis.DrawString(arrValueNames[1],new Font("宋体",10),Brushes.Black,new PointF(450,20));
   //画坐标
   objGraphis.DrawLine(pen1,60,50,60,270);
   objGraphis.DrawLine(pen1,60,270,540,270);
   //画Y轴坐标
   for(int i=0;i<11;i++)
   {
    float ykedu=10*i;
    objGraphis.DrawLine(pen1,60,70+20*i,55,70+20*i);
    objGraphis.DrawString(ykedu.ToString(),new Font("宋体",10),Brushes.Black,30,270-20*i-5);
  

   }
   //画矩形图
   PointF RectangStart=new PointF(100,270);
   for (int i=0;i<2;i++)
   {
    objGraphis.FillRectangle(new SolidBrush(GetColor(i)),RectangStart.X,270-2*arrValues[i],100,arrValues[i]*2);//矩形的宽度为50和相应数值的高度
    objGraphis.DrawRectangle(Pens.Black,RectangStart.X,270-arrValues[i]*2,100,arrValues[i]*2);
    objGraphis.DrawString(arrValues[i].ToString(),new Font("宋体",10),Brushes.Black,RectangStart.X+10,270-arrValues[i]*2-15);
                RectangStart.X+=110;
   }

 


   //画饼形图
   float sglCurrentAngle;
   float sglTotalAngle=0;
   for(int a=0;a<arrValues.Length-1;a++)
   {
    sglTotalAngle+=arrValues[a];

   }
   for (int b=0;b<arrValues.Length;b++)
   {
    sglCurrentAngle=arrValues[b]/sglTotalAngle*360;
    objGraphis.FillPie(new SolidBrush(GetColor(b)),420,95,100,100,sglTotalAngle,sglCurrentAngle);
    sglTotalAngle+=sglCurrentAngle;
   }
   objBitMap.Save(Response.OutputStream,System.Drawing.Imaging.ImageFormat.Jpeg);

 //将图形输出到屏幕,也可以将图形输出到Image控件上.
  }

颜色获取函数

private Color GetColor(int itemIndex)
  {
   Color objColor=new Color();
   switch(itemIndex)
   {
    case 0:
     objColor=Color.Green;
     break;
    case 1:
     objColor=Color.Red;
     break;
    default:
     objColor=Color.Blue;
     break;


   }
   return objColor;
  }

在地图上画饼图(ol3)

1、数据加载 var f={     "geometry": {         "type": "Point",         "coordinates":  ol.proj.transf...
  • djskl
  • djskl
  • 2014年07月31日 11:06
  • 1080

C#中wpf使用Devexpress画图:柱状图,饼状图,散点图,曲线图

C#中wpf使用Devexpress画图:柱状图,饼状图,散点图,曲线图1.效果 完整代码下载: 下图是随便生成的数据测试效果: C#中wpf使用Devexpress画图 2.部分设置可以从控...
  • yhhyhhyhhyhh
  • yhhyhhyhhyhh
  • 2016年12月25日 11:29
  • 2353

QT学习 之 三维饼图绘制

QT里没有相应统计图形的绘制组件 只有手工自己画效果如图void aaq::paintEvent( QPaintEvent* ev ) { QPainter painter(this); ...
  • u013007900
  • u013007900
  • 2015年11月26日 17:36
  • 1927

c# 通过.net自带的chart控件绘制饼图pie chart

需要实现的目标是: 1.将数据绑定到pie的后台数据中,自动生成饼图。 2.生成的饼图有详细文字的说明。 具体的实现步骤: >>前台界面的设置: 1.设置chart1的属...
  • mobingdetong
  • mobingdetong
  • 2014年04月02日 10:26
  • 810

IOS之以UIBezierPath绘制饼状图

1.绘制bing'zhu
  • xyybaozhen
  • xyybaozhen
  • 2014年10月27日 10:07
  • 3384

利用canvas绘制饼状图一种方法

利用canvas绘制饼状图以及上面对应的占比数值,方法很多,下面分享其中一种方法。 效果 思路: 1)将每块饼的占比以整数形式储存在数组nums中,将每个饼的颜色以字符串形式储存在数...
  • weixin_36185028
  • weixin_36185028
  • 2016年12月21日 17:42
  • 2423

C# 图形的绘制矩形椭圆

1.矩形框的绘制 绘制矩形框是用GDI+技术的DrawRectangle方法来实现的,它有3种语法,其语法格式如下: public void DrawRectangle (Pen ...
  • haoduo123456789001
  • haoduo123456789001
  • 2016年05月31日 14:15
  • 3131

iOS 中饼状图的自定义绘制

前几天有一个需求是制作一个统计工资的饼状图,但是和一般的饼状图不同的是要求改饼状图中心需要有两条文字,功能需求就是这样,先上一张效果图: 因为咱们的饼状图本身只是一个View ,在调用的时候一定是在...
  • willhanweijia
  • willhanweijia
  • 2016年09月02日 11:54
  • 1528

C#之WinForm基础 画一个矩形与扇形

慈心积善融学习,技术愿为有情学。善心速造多好事,前人栽树后乘凉。我今于此写经验,愿见文者得启发。 呐,为什么要写画一个扇形呢?因为画一个扇形的话,就需要创建一个矩形。最开始这个博文的题目...
  • yushaopu
  • yushaopu
  • 2016年09月22日 16:49
  • 3338

手撸一个Android饼状图表

要完成一个饼状图,其实就是将一个360度分成很多份,然后每一份绘制一个扇形,这些扇形加起来正好是一个整圆。 效果: android中绘制扇形 我们可以用绘制弧形的apidrawArc(RectF...
  • mingyunxiaohai
  • mingyunxiaohai
  • 2016年09月20日 17:07
  • 5112
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#如何实现画矩形图,饼状图
举报原因:
原因补充:

(最多只允许输入30个字)