用web chart控件实现折线,柱状,扇形图

  项目中有报表图形化的需求, 于是开始在网上找第三方chart控件。因时间紧迫,在CSDN中搜了几轮后大至确定了几个候选:一、Office带的OWC控件;二、ComponentOne;三、Web Chart。

OWC似乎使用者居多,但看见有网友在帖中抱怨OWC在使用时需要许可证书,于是将其排除,我可不想BOSS在看报表时弹出一个“没有许可证书”的窗口。

接着找到了ComponentOne的Web chart做出的各种效果图,效果极佳。我一下子被迷住了,决定就是它,于是马不停蹄的下了最新版100多M的安装文件,又花一上午找了个可以用的注册码,再找了篇教程,OK万事俱备,兴匆匆的开始写代码。需求不复杂,在一个页面上画出多条折线图即可,根据以往经验,这种大型商业共享软件在官方站点上看两个Example顶多一小时绝对能搞定的。但结果让我非常的恼火,官方的Example简单的它偏不提供,弄些什么AJAX的,一大堆实现辅助效果的代码,你要找的核心的那三四行打死也找不到,好像就怕你一下子把它的Example看明白了。历来讨厌这种软件。于是卸载、删除......等全部弄完,一天过去了。

还好,后来找到了Web Chart。代码超简洁,效果也还不错,写些简单的示例供大家参考:

一、折线图

  

// 引用命名空间
using  WebChart;

// 定义一个颜色数组,供循环时为不同的记录填充不同的颜色
private   string [] myColor  =   new   string []
{
    
" Tomato " , // 西红柿
     " Black " ,
    
" Gold " ,
    
" Blue " ,
    
" Green " ,
    
" Orange " ,
    
" Pink " , // 粉红
     " Violet " , // 紫罗兰
     " Orchid " , // 淡紫色
     " Lime " , // 亮绿
     " Tan " , // 茶色
     " Red " ,
    
" Navy " // 橘红
};

// 用静态方式示例了画出一条两个点的最简单折线.实际项目据此做循环而以.
private   void  doIt()
{
    
// 创建折线对象
    LineChart myChart  =   new  LineChart();
    
// 为折线填充颜色
    myChart.Line.Color  =  Color.FromName(myColor[ 0 ]);
    myChart.Fill.Color 
=  Color.FromName(myColor[ 0 ]);
    myChart.LineMarker 
=   new  DiamondLineMarker( 8 , Color.FromName(myColor[ 0 ]), Color.FromName(myColor[ 0 ]));
    
// 图例说明
    myChart.Legend  =   " 折线一 " ;
    
// 添加第一个点,参数一为x座标上的名称,参数二为y座标上的值
    myChart.Data.Add( new  ChartPoint( " " float .Parse( " 100 " )));
    
// 添加第二个点
    myChart.Data.Add( new  ChartPoint( " " float .Parse( " 200 " )));
    
// chart为控件ID
     this .chart.Charts.Add(myChart);
    
this .chart.RedrawChart();
}

二、柱状图

// 颜色数组
private   string [] myColor  =   new   string []
{
    
" Fuchsia " ,
    
" Black " ,
    
" Gold " ,
    
" Blue " ,
    
" HotPink " ,
    
" Orange " ,
    
" Peru " ,
    
" DodgerBlue " ,
    
" Lime " ,
    
" Tan " ,
    
" Red " ,
    
" GreenYellow " ,
    
" DarkGreen " ,
    
" DimGray " ,
    
" Orchid "
};

// 调用该方法生成柱状图
private   void  bindchart()
{
    
// 获取一个DataTable,具体函数略...
    DataTable dt  =   this .getdt();
    
if  (dt  !=   null )
    {
        
if  (dt.Rows.Count  >   0 )
        {
            
// 遍历DataTable为每条记录生成一个柱状
             for  ( int  i  =   0 ; i  <  dt.Rows.Count; i ++ )
            {
                
// 创建对象
                ColumnChart mychart  =   new  ColumnChart();
                
// 设置柱子宽度
                mychart.MaxColumnWidth  =   48 ;
                
// 颜色
                mychart.Fill.Color  =  Color.FromName( this .myColor[i]);
                
// 在柱子上显示数量
                mychart.DataLabels.Visible  =   true ;
                
// 数量的字体
                mychart.DataLabels.Font  =   new  Font( " Verdana " 14 );
                
// 添加
                mychart.Data.Add( new  ChartPoint( "" float .Parse(dt.Rows[i][ " num " ].ToString())));
                
// 备注
                mychart.Legend  =  dt.Rows[i][ " name " ].ToString();
                
this .chart.Charts.Add(mychart);
            }
            
// 辅助设置
            
// 背景色
            chart.Background.Color  =  Color.FromArgb( 165 0 16 );
            chart.YAxisFont.ForeColor 
=  Color.FromArgb( 165 0 16 );
            chart.XAxisFont.ForeColor 
=  Color.FromArgb( 165 0 16 );
            
// 内部线条
            chart.Border.Color  =  Color.FromArgb( 200 200 200 );
            
// 边框样式
            chart.BorderStyle  =  BorderStyle.None;
            
// y最大值
             double  max  =   double .Parse(dt.Compute( " MAX(num) " , "" ).ToString());
            
// 递增值
             int  intv  =   2 ;

            
// 数量小于16的情况
             if  (max  <   16 )
            {
                max 
=   16 ;
            }
            
// 大于16的情况
             else
            {
                intv 
=   int .Parse(Math.Ceiling(max / 8 ).ToString());
                max 
+=  intv;
            }

            
// 设置Y轴终点值
            chart.YCustomEnd  =   int .Parse(max.ToString());
            
// y递增值
            chart.YValuesInterval  =  intv;

            
// 生成
             this .chart.RedrawChart();
        }
    }
}

 

Web Chart为免费控件,需要的朋友可去官方地址下载:http://www.carlosag.net/Tools/WebChart/Default.aspx,上面还有很多效果和代码示例。

Web Chart Flot - Flot 为 jQuery 提供的javascript代码库. 容易使用,有特色的图表,提供交互功能(能够放大缩小数据区域等)。 Open Flash Chart - Open Flash Chart 是一个 Flash 图表组件,很容易安装,提供以下语言的API: PHP, Perl, Python, Java, Ruby on Rails, and .Net 来控制图表。 ? AmCharts - AmCharts 是一个动画交互Flash图表。支持: Pie Charts, Line Charts, Scatter/Bubble Charts, Bar/Column Charts, 甚至股票图表。 ? Emprise JavaScript Charts - Emprise 是一个100% 纯 JavaScript 图表解决方案,并不需要任何 JavaScript 框架. ? PlotKit - PlotKit 是一个 图表和图像的Javascript 库. PlotKit 和 MochiKit javascript 库一起工作,支持HTML Canvas 和 Adobe SVG 显示 以及本地浏览器支持。尤其文档非常全。 ? Flotr - Flotr 是Prototype 1.6.0.2框架的javascript插件库。 Flotr帮助你在浏览器中创建图表,支持鼠标事件响应,放大缩小,CSS类型支持等。 PHP/SWF Charts - PHP/SWF 是一个简单支持web图表的强大工具,你能使用 PHP 来收集数据,并发送给flash,支持很多图表类型: Line, Column, Stacked column, Floating column, 3D column, Stacked 3D column, Parallel 3D column, Pie, 3D Pie, Bar, Stacked bar, Floating bar, Area, Stacked area, Candlestick, Scatter, Polar, Mixed. ? Visifire - Visifire 是用 Silverlight 做的,是一个开源可视化数据组件,使用Visifire你能创建动画 Silverlight 图表,支持 ASP, ASP.Net, PHP, JSP, ColdFusion, Ruby on Rails 或者 简单 HTML调用. ? FusionCharts - FusionCharts 是一个跨浏览器和跨平台的flash图表组件,能够被 ASP.NET, ASP, PHP, JSP, ColdFusion, Ruby on Rails, 简单 HTML 页面 甚至PPT调用. 几乎所有你知道的语言它都支持。 ? JFreeChart - JFreeChart 是一个开源java图表库,让开发者能够很容易在程序里面显示高质量的图表。 JFreeChart 项目从7年前便开始了,起始于 2000 年1月, 已经有四五万开发者已经使用了JFreeChart。JFreeChart 支持很多种图形文件格式: JPEG, GIF, PDF, EPS and SVG. 这对于java开发者是一个很好的资源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值