C#实现饼图与棒图

转载 2007年09月18日 10:51:00

原文地址:http://blog.csdn.net/asthlon/archive/2004/11/22/190965.aspx

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace xcrm.Module.report
{
 /// <summary>
 /// draw 的摘要说明。
 /// </summary>
 public class draw : System.Web.UI.Page
 {
  private void Page_Load(object sender, System.EventArgs e)
  {
   // 在此处放置用户代码以初始化页面
   Draw_Imgbar();
  }
  //画棒图
  void Draw_Imgbar(){
   //创建一个长度为400,宽带为400的Bitmap实例
   Bitmap bmp = new Bitmap(400,300);
   Graphics g;
   g = Graphics.FromImage(bmp);
   g.Clear(Color.Snow);
   string[] sitem = {"很好","好","一般","差"};
   int[] num = {1000,69,90,2000};
   int cnt,i,len,iBarWidth;
   float scale;
   float[] nflt;
   string header;
   header = "";
   cnt =0;
      iBarWidth = 40;
   scale = 1;
   len = num.Length;
   //nflt.Length = len;
   nflt = new float[len];
   for(i=0;i<len;i++)
   {
    cnt += num[i];
   }
   //flt = cnt /len;
   for(i=0;i<len;i++)
   {
   nflt[i] = 200 * num[i]/cnt;
    //nflt[i] = scale * num[i]/cnt;
   }
           

   header = "调查统计结果一览图";
   g.DrawString ( header , new Font( "宋体", 12,FontStyle.Bold) , Brushes.Black , new Point( 75 , 10 ) ) ;
   Point myRec = new Point ( 300 , 40 ) ;
   Point myDec = new Point ( 320 , 40 ) ;

         
   for(i=0;i<len;i++)
   {
    g.DrawRectangle ( Pens.Black , myRec.X , myRec.Y , 20 , 10 ) ;
    //绘制小方块
    g.FillRectangle ( new SolidBrush( Return_Color( i ) ) , myRec.X , myRec.Y , 20 , 10 ) ;
    //填充小方块
    g.DrawString ( " " + sitem[i], new Font( "宋体" , 9 ) , Brushes.Black , myDec ) ;
    //绘制小方块右边的文字
    myRec.Y += 15 ;
    myDec.Y += 15 ;

    g . DrawRectangle ( Pens.Black , ( i * iBarWidth ) + 15 , 290 - (nflt[ i ] * scale ) , 20 , ( nflt[ i ] * scale ) + 5 ) ;
    //绘制Bar图
    g . FillRectangle ( new SolidBrush ( Return_Color( i ) ) , ( i * iBarWidth ) + 15 , 290 - ( nflt[ i ] * scale ) , 20 , ( nflt[ i ] * scale ) + 5 ) ;
    //以指定的色彩填充Bar图
    g . DrawString ( num[ i ].ToString ( ) , new Font( "宋体" , 9 ) , Brushes.Black , ( i * iBarWidth ) + 20 , 275 - (nflt[ i ] * scale ) ) ;
    //显示Bar图代表的数据

    //s = s + nflt[i];    
   }
   Pen p = new Pen ( Color.Black , 1 ) ;
   g . DrawRectangle ( p , 1 , 1 , 398 , 298 ) ;
   bmp.Save ( Response.OutputStream , System.Drawing.Imaging.ImageFormat.Jpeg);
   bmp.Dispose();
  }


  //画饼图
  void Draw_Img(){
   Bitmap bmp = new Bitmap(400,300);
            //创建一个长度为400,宽带为400的Bitmap实例
            Graphics g;
   g = Graphics.FromImage(bmp);
   g.Clear(Color.Snow);
   string[] sitem = {"很好","好","一般","差"};
   int[] num = {1000,69,90,20};
   int cnt,i,len;
   float s;
   float[] nflt;
   string header;
   header = "";
   cnt =0;
   s = 0;
   len = num.Length;
   //nflt.Length = len;
   nflt = new float[len];
   for(i=0;i<len;i++){
    cnt += num[i];
   }
   //flt = cnt /len;
   for(i=0;i<len;i++){
   
    nflt[i] = 360 * num[i]/cnt;
   }


   header = "调查统计结果一览图";
   g.DrawString ( header , new Font( "宋体", 12,FontStyle.Bold) , Brushes.Black , new Point( 75 , 10 ) ) ;
   g.DrawString ( "单位:次" , new Font ( "宋体" , 9 ) , Brushes . Black , new Point(300 , 25 ) ) ;

   Point myRec = new Point ( 300 , 40 ) ;
   Point myDec = new Point ( 320 , 40 ) ;

         
   for(i=0;i<len;i++)
   {
    if(i==len-1){
     //s = 360-s;
     nflt[i] = 360-s;
    }
   
    g.DrawRectangle ( Pens.Black , myRec.X , myRec.Y , 20 , 10 ) ;
    //绘制小方块
    g.FillRectangle ( new SolidBrush( Return_Color( i ) ) , myRec.X , myRec.Y , 20 , 10 ) ;
    //填充小方块
    g.DrawString ( " " + sitem[i] + " " + num[i], new Font( "宋体" , 9 ) , Brushes.Black , myDec ) ;
    //绘制小方块右边的文字
    myRec.Y += 15 ;
    myDec.Y += 15 ;

    g.FillPie( new SolidBrush (Return_Color(i)) , 50 , 50 , 200 , 200 , s , nflt[i] ) ;
    g.DrawPie( Pens.Black , 50 , 50 , 200 , 200 , s , nflt[i]);
    s = s + nflt[i];    
   }
   Pen p = new Pen ( Color.Black , 1 ) ;
   g . DrawRectangle ( p , 1 , 1 , 398 , 298 ) ;
             bmp.Save ( Response.OutputStream , System.Drawing.Imaging.ImageFormat.Jpeg);
  }
  public Color Return_Color(int i){
   switch(i){
    case 0:
     return Color.Red;
     //break;
    case 1:
     return Color.Blue;
     //break;
    case 2:
     return Color.Yellow;
    case 3:
     return Color.Green;
     //break;
    case 4:
     return Color.Pink;
     //break;
    case 5:
     return Color.Plum;
     //break;
    case 6:
     return Color.Gray;
     //break;
    case 7:
     return Color.Salmon;
     //break;
    case 8:
     return Color.RosyBrown;
     //break;
    case 9:
     return Color.Teal;
     //break;
    case 10:
     return Color.Orange;
     //break;
    case 11:
     return Color.Thistle;
     //break;
    case 12:
     return Color.Maroon;
     //break;
    default:
     return Color.WhiteSmoke;
     //break;

   }
  }
  #region Web 窗体设计器生成的代码
  override protected void OnInit(EventArgs e)
  {
   //
   // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
   //
   InitializeComponent();
   base.OnInit(e);
  }
  
  /// <summary>
  /// 设计器支持所需的方法 - 不要使用代码编辑器修改
  /// 此方法的内容。
  /// </summary>
  private void InitializeComponent()
  {   
   this.Load += new System.EventHandler(this.Page_Load);
  }
  #endregion
 }

.net实现3D饼图

1 实现原理:根据各个数据的比重画扇形组成一个椭圆(柱体的上表面),实现2D饼图(),设定一个厚度h(柱体的高度),在距离此柱体的上表面下方h处画一个同样的椭圆。 然后将侧面的可见区域[0,18...
  • KimmKing
  • KimmKing
  • 2007年06月04日 09:23
  • 6122

C#使用Ms Chart 实现饼图

//饼图 dt数据结构为 columndata(数据) columnname(文本) 这两列 private void ViewChart(DataTable _dt, str...
  • lzxue1989
  • lzxue1989
  • 2013年07月29日 14:08
  • 8378

C# 类似PS的魔棒工具(2)羽化

上一篇文章写了所谓的魔棒工具其实离可以使用的魔棒还差得远,不过已经可以找到边界和掩码图了,这篇文章讲讲魔棒的边界羽化功能。 1、羽化的概念 以前学习过PS,大概知道羽化的作用,却不知道什么原理。现...
  • wangzibigan
  • wangzibigan
  • 2017年12月25日 20:21
  • 190

PHP对象编程实现3D饼图

 //公用函数 //把角度转换为弧度 function deg2Arc($degrees) { return($degrees * (pi()/180.0)); } //RGB function ge...
  • wiregate
  • wiregate
  • 2005年04月20日 17:28
  • 807

echarts3实现柱状图和饼图详解

本篇文章实现的是以下两种需求: 1,使用Echarts3实现柱状图; 2,使用Echarts3实现饼图; 包含Echarts使用过程中遇到的坑的解决办法。...
  • fxp850899969
  • fxp850899969
  • 2017年04月10日 17:11
  • 3331

matlab 绘制误差棒图

自我记录一下 errorbar
  • windows_peng
  • windows_peng
  • 2017年12月25日 12:47
  • 103

Matlab绘制误差棒图----errorbar函数的使用

转载链接:http://blog.sina.com.cn/s/blog_66d362d70102v4i5.html 首先我们假设一组数据:     A地1-6月份降雨量的平均值分别为12、11、7...
  • qq_37917868
  • qq_37917868
  • 2017年03月20日 22:25
  • 2771

ehcart 多图 饼图和柱状图 echart多图加载问题

ehcart多图 饼图和柱状图 echart多图加载问题
  • alen_en
  • alen_en
  • 2016年03月06日 20:43
  • 2280

图像之魔棒工具实现

这是以前发的一篇文章,现在 魔棒工具对于做过ps的同学应该都不陌生,本文就介绍下魔棒工具在图像中的实现原理以及实现。...
  • ixshells
  • ixshells
  • 2014年11月19日 11:12
  • 1382

(转)PHP生成饼图

 首先要把php_iconv.dll和inconv.dll COPY到c:/winnt/system32下,define("ANGLE_STEP", 5); //定义画椭圆弧时的角度步长 func...
  • jackyrongvip
  • jackyrongvip
  • 2007年08月10日 08:15
  • 467
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#实现饼图与棒图
举报原因:
原因补充:

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