`
dunhuangmi
  • 浏览: 27126 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

用highcharts插件画动态饼图的实例

阅读更多

【dunhuangmi原创,转载注明】 highcharts(http://www.highcharts.com/)是一款功能强大的绘图插件,基于VML和SVG开发,基本可以能兼容所有的浏览器。在它基础上可以开发柱状图、折线图、饼图等各种统计图表,并且效果绚丽。

本文只是一个简单的应用示例,希望可以帮助大家缩短学习highcharts的时间。

项目需求是实现如下效果的统计饼图,鼠标移到不同的扇区上时页面其他区域会相应产生变化,如果数据有变化可以实时重绘。



 开发这样一个页面,我们需要知道以下几点:1、绘图数据源的格式和引用方法;2、饼图及注释显示的颜色、大小等样式设定;3、事件绑定的方式和接口调用方法;4、图象重绘方法

我的demo页面设计如下:



 

下面来跟我学习如何做出这个页面:

<!DOCTYPE HTML>
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
		<title>画饼图Highcharts Pie Demo</title>
		<style>
			ul,li{margin:0;padding:0;list-style:none}
			ul{width:400px;border:1px solid #e5e5e5;overflow:hidden}
			li{float:left;width:400px;line-height:25px;font-size:14px;padding:3px 10px}
			li.selected{background:#e5e5e5}
			p{margin:10px 0 0;font-size:14px;line-height:25px;}
			#container{width: 450px; height: 250px;background:#f5f2ec;padding:10px}
			.optbox{font-size:14px;padding-top:10px;}
			input[type="text"]{width:20px}
		</style>
		<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script src="http://code.highcharts.com/highcharts.js"></script>
<script src="http://code.highcharts.com/modules/exporting.js"></script>
	</head>
<body>
<div id="container"></div>
<p>当前选中的分类:</p>
<ul>
	<li class="type1">有帮助的人</li>
	<li class="type2">同行</li>
	<li class="type3">有趣的人</li>
	<li class="type4">其他</li>
</ul>
<p>你也可以重画图形:</p>
<div class="optbox">有帮助的人:<input type="text" value="20" id="num1"/>%, 同行:<input type="text" value="13" id="num2"/>%,有趣的人:<input type="text" value="30" id="num3"/>%,其他:<span id="num4">37</span>%<input type="button" value="重画" onclick="redrawchart()"/></div>
</body>
</html>

很简单,不解释。

script部分(注意注释)

<script type="text/javascript">
    var chart1=null;
	var dataArray= [
                        ['有帮助的人',26.5],
                        [ '同行', 25.5],
                        [ '有趣的人',40],
			[ '其他',8]
				];
$(function () {
    $(document).ready(function() {
        chart1 = new Highcharts.Chart({
			colors:['#46cbee', '#fec157', '#e57244', '#cfd17d', '#24CBE5', '#64E572', '#FF9655', '#FFF263', '#6AF9C4'] ,//不同组数据的显示背景色,循环引用
            chart: {
                renderTo: 'container',//画布所在的div id
                plotBackgroundColor: '#f5f2ec',//画布背景色
                plotBorderWidth: null,//画布边框
                plotShadow: false,
				margin:[0,0,0,0]//画布外边框
            },
            title: {
                text: ''//画布题目,此处置空
            },
            tooltip: {
				enabled:false,//去掉浮动提示框
				shared:true
            },
            plotOptions: {
                pie: {
                    allowPointSelect: true,
                    cursor: 'pointer',
					size:'90%',
                    dataLabels: {
                        enabled: true,
                        color: '#666666',
						connectorWidth: 0,
						distance: 3,
                        connectorColor: '#666666',
						style:{fontSize:'12px',fontWeight:'normal'},
                        formatter: function() {
                            return  this.point.name+ this.percentage +' %';
                        }
					},
					
					events: {
					
						click: function(e) {
							//有需要时可写事件代码
						},
						mouseOver:function(){
							//有需要时可写事件代码
						},
                                                mouseOut:function(){
                                                       //有需要时可写事件代码
                                               }
                                        },
					point: {
						events: {
						click: function(e) {
							this.slice(false);
							if ( e && e.stopPropagation )//禁止事件冒泡
								e.stopPropagation(); 
							else
								window.event.cancelBubble = true;
							return false;
                                                },
						mouseOver: function(evt){
								this.slice(false);//禁止选中扇形滑开
								$('li').removeClass('selected');
								switch (this.name)
								{
								case '有帮助的人':
								$('.type1').toggleClass("selected");
								break;
								case '同行':
								$('.type2').toggleClass("selected");
								break;
								case '有趣的人':
								$('.type3').toggleClass("selected");
								break;
								case '其他':
								$('.type4').toggleClass("selected");
								}
						},
						mouseOut: function(evt){
								//有需要时可写事件代码
						}
					}
				}
                }
            },
			exporting: {  
				buttons: {  
					exportButton: {  
						enabled:false //不显示导出icon 
					},  
					printButton: {  
						enabled:false //不显示打印icon
					}  
				}  
			},
			credits:{
				enabled:false//不显示highcharts网址
			},
            series: [{
                type: 'pie',
                name: '有关联系人分类',
                data: dataArray
            }]
        });
    });
   
   $('input[type="text"]').blur(function(){
			$('#num4').html(100-parseInt($('#num1').val())-parseInt($('#num2').val())-parseInt($('#num3').val()));

		var num4=100-parseInt($('#num1').val())-parseInt($('#num2').val())-parseInt($('#num3').val());
		if(num4<0){
			alert('各分类数字加总不得大于100');
		}
   });
   $('input[type="text"]').keyup(function(){
		$('#num4').html(100-parseInt($('#num1').val())-parseInt($('#num2').val())-parseInt($('#num3').val()));
   });
});

 function redrawchart(){
		var sumnow=parseInt($('#num1').val())+parseInt($('#num2').val())+parseInt($('#num3').val())+parseInt($('#num4').html());
		if (sumnow!=100)
		{
			alert('请重新调整各分类项,使其和能够等于100');
			return;
		}
		dataArray=[
            ['有帮助的人',parseInt($('#num1').val())],
            [ '同行', parseInt($('#num2').val())],
            [ '有趣的人',parseInt($('#num3').val())],
            ['其他',parseInt($('#num4').html())]
		];
		this.chart1.series[0].setData(dataArray);
		this.chart1.series[0].redraw();
}
</script>

 

dataArray是全局变量,存放用于绘图的数据。

Highcharts.Chart对象的各种属性如何使用都有详细注释,redraw()方法用来重绘。缺省显示的打印icon,导出icon,各种标题、注释、页脚都可以去掉,用法见代码。

饼图的事件绑定方法是难点。我们注意到,一个饼图有两层事件,一层绑定在pie的events上,但这层事件并不给出饼图的名称、序号,无法判断当前选定的是哪个饼图,第二层事件绑定在pie之point对象上,point的属性不仅有当前点的位置信息,还包含了当前点所属饼图的名称,可以根据名称来进行我们需要的dom操作。为了使point的click()代码奏效,我还加上了停止冒泡代码,防止click事件冒泡到pie的click事件上去,引起默认操作。

奉上highcharts的手册http://api.highcharts.com/highcharts,作为勘误依据。

 

最后强烈 推荐另一个绘图插件,拉斐尔raphael.js(http://www.raphaeljs.com),它更加简单、小巧,再开发也不困难,比highcharts更适合互联网使用。

本文源代码见http://dunhuang.a67.cnaaa1.com/html5/pietest.htm【dunhuangmi原创】

  • 大小: 53.1 KB
  • 大小: 25.7 KB
分享到:
评论

相关推荐

    jQuery插件HighCharts绘制2D饼图效果示例【附demo源码下载】

    本文实例讲述了jQuery插件HighCharts绘制2D饼图效果。分享给大家供大家参考,具体如下: 1、实例代码: &lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;meta charset="UTF-8"&gt; &lt;title&gt;HighCharts 2D...

    highchartsJS插件(有源码)

    Highcharts是一款广泛应用于Web开发的数据可视化插件,它允许开发者用JavaScript轻松创建各种高质量的图表,包括折线图、柱状图、饼图等。在SVG(可缩放矢量图形)和jQuery的支持下,Highcharts能实现动态数据呈现,...

    jQuery插件HighCharts实现的2D对数饼图效果示例【附demo源码下载】

    主要介绍了jQuery插件HighCharts实现的2D对数饼图效果,结合实例形式分析了jQuery图形插件HighCharts绘制2D对数饼图的具体实现步骤与相关操作技巧,并附带demo源码供读者下载参考,需要的朋友可以参考下

    数据统计-图形化展示-HighCharts插件

    在本项目中,“数据统计-图形化展示-HighCharts插件”是利用HighCharts的功能来实现数据的动态轮换展示,即统计图会自动进行切换,以呈现多角度的数据分析结果。 首先,我们需要了解HighCharts的基本用法。...

    Highcharts(纯JS图表插件)

    例如,你可以用JQuery选择器找到图表容器,然后创建Highcharts实例: ```javascript $(document).ready(function() { $('#container').highcharts({ // 配置项... }); }); ``` 总的来说,Highcharts是一个强大...

    Highcharts网页图表制作实例详解源文件

    例如,你可以用`Highcharts.Renderer`对象绘制自定义图形,或者查找社区提供的插件增强功能。 六、实际案例分析 本实例详解源文件包含了多个实际的图表制作例子,涵盖了不同类型的图表和配置选项的使用。通过阅读...

    highcharts报表控件 jquery报表插件

    "highcharts报表控件"和"jquery报表插件"指的是使用Highcharts与jQuery结合,为网页构建动态、丰富的数据报表。 Highcharts支持多种图表类型,包括标题中提到的"饼图"和"柱形图",以及其他如线图、面积图、散点图、...

    Highcharts2.2.1

    Highcharts还支持丰富的插件,这些插件可以扩展其核心功能,比如数据列的动态加载、地图绘制、工具提示增强等。这些插件让开发者能够定制更复杂、更个性化的图表,满足不同项目的需求。 在实际应用中,使用...

    功能比较强大的统计图形jquery 插件Highcharts2.1

    - "examples"很可能是包含多个Highcharts实例的代码示例目录,开发者可以通过这些例子学习如何使用Highcharts的各种功能。 - "js"目录可能包含了Highcharts的核心库文件和其他必要的JavaScript资源,如jQuery库或者...

    highcharts好用的前端统计js

    Highcharts支持多种图表类型,包括折线图、柱状图、饼图、散点图、面积图、甘特图等,适用于各种数据展示需求。其API和配置选项丰富,允许开发者自定义颜色、样式、交互行为以及数据加载方式,以满足不同项目的设计...

    利用jquery的插件highcharts制作图表

    2. 插件绑定:通过`$.fn.highcharts()`方法,将Highcharts实例绑定到元素上,如`$("#chartContainer").highcharts(options)`。 3. 动态更新:使用`series.addPoint()`或`chart.update()`方法动态添加或更新数据,...

    统计图插件及代码实例

    本主题主要关注“统计图插件及代码实例”,将深入探讨如何使用这些插件来创建各种类型的统计图,如折线图、饼图和柱状图,以有效地展示和理解数据。 首先,我们来了解一下什么是统计图插件。统计图插件是软件或Web...

    jQuery highcharts实时更新数据的图表插件源码.zip

    本压缩包“jQuery highcharts实时更新数据的图表插件源码.zip”包含了使用jQuery和Highcharts实现动态更新图表的示例代码,适用于需要实时展示数据变化的应用场景。 首先,了解jQuery是至关重要的。jQuery是一个轻...

    jQuery插件HighCharts绘制2D带有Legend的饼图效果示例【附demo源码下载】

    主要介绍了jQuery插件HighCharts绘制2D带有Legend的饼图效果,结合实例形式分析了jQuery使用HighCharts绘制带明细显示的饼状图效果实现技巧,并附带了demo源码供读者下载参考,需要的朋友可以参考下

    highcharts 封装使用

    4. **初始化Highcharts对象**:使用传递的`data`和`options`来配置Highcharts的`Chart`实例。 ```javascript var chart = Highcharts.chart(container, { series: data, // 其他配置项... }); ``` 5. **处理配置...

    HighCharts_详细使用及API文档说明

    HighCharts是一款广泛应用于Web开发中的JavaScript图表库,它能够帮助开发者轻松创建各种动态、交互式的图表,如柱状图、折线图、饼图、散点图等。本篇文章将详细解析HighCharts的使用方法以及其API接口,帮助开发者...

    jQuery插件HighCharts绘制2D柱状图、折线图和饼图的组合图效果示例【附demo源码下载】

    在本实例中,我们将详细探讨如何使用jQuery插件HighCharts来绘制2D柱状图、折线图和饼图的组合图。这将帮助我们以视觉化的方式展示数据,比如在销售报告中显示各天的销售额以及它们的平均值,并通过饼图展示销售比例...

    Highcharts生成图表所需源码包

    Highcharts是一款广泛应用于Web开发中的JavaScript图表库,它允许开发者轻松地在网页上创建各种交互式的图表,如折线图、柱状图、饼图、散点图等。这个"Highcharts生成图表所需源码包"包含了两个核心文件:...

Global site tag (gtag.js) - Google Analytics