网址:
http://www.hcharts.cn/demo/index.php
效果图:
它的网址里面都很全的。简单实用扣代码即可
使用时注意数据格式即可
1 //获取mood_evalue的百分比 2 $total_mood_evalue = 0; 3 //初始化key的数组,统计key的百分比 4 $mood_key_arr = array(); 5 6 //1-5分别对应值1-5; 7 $mood_evalue_1 = $mood_evalue_2 = $mood_evalue_3 = $mood_evalue_4 = $mood_evalue_5 = 0; 8 foreach ($info as $key => $value) { 9 $total_mood_evalue++; 10 switch ($value['mood_evalue']) { 11 case 1: 12 $mood_evalue_1++; 13 $info[$key]['mood_evalue_str'] = '很好'; 14 break; 15 case 2: 16 $mood_evalue_2++; 17 $info[$key]['mood_evalue_str'] = '好'; 18 break; 19 case 3: 20 $mood_evalue_3++; 21 $info[$key]['mood_evalue_str'] = '一般'; 22 break; 23 case 4: 24 $mood_evalue_4++; 25 $info[$key]['mood_evalue_str'] = '不好'; 26 break; 27 case 5: 28 $mood_evalue_5++; 29 $info[$key]['mood_evalue_str'] = '很差'; 30 break; 31 default: 32 break; 33 } 34 $mood_key_arr[] = $value['mood_key']; 35 } 36 $mood_evalue_percent = array( 37 array('很好',round($mood_evalue_1 / $total_mood_evalue * 100,2)), 38 array('好',round($mood_evalue_2 / $total_mood_evalue * 100,2)), 39 array('一般',round($mood_evalue_3 / $total_mood_evalue * 100,2)), 40 array('不好',round($mood_evalue_4 / $total_mood_evalue * 100,2)), 41 array('很差',round($mood_evalue_5 / $total_mood_evalue * 100,2)), 42 );
将值json处理即可,或者使用js来格式化数据
补充:
Highcharts 跟 Highstock 效果不一样。使用方法大体一致
自己简单总结的,不一定对
1 chart 2 type : 'line' 曲线图, 3 'area' 区域图, 4 'areaspline' 曲线区域图 5 'arearange' 区域范围图 6 'column' 柱形图 7 'bar' 条形图 8 'pie' 饼图,饼图跟其他的不一样,不仅仅指定type。 9 inverted: 是否反转x,y轴;(true,false) 10 11 title 12 text : '主标题文字' 13 x:文字定位x, 14 y:文字定位y轴, 15 16 subtitle 17 text : '副标题文字' 18 x:文字定位x, 19 y:文字定位y轴, 20 21 legend(对说明的配置,即蓝色线图代表的文字意义之类的) 22 layout : 'vertical' 表示垂直放置,不设置即水平的 23 align : 水平位置 24 verticalAlign: 垂直位置 25 x: 定位x 26 y: 定位y 27 floating: 是否浮动,true表示真,false表示不浮动 28 borderWidth: 边框宽度,数字 29 backgroundColor: 背景色 30 31 xAxis 32 title { 33 text: 'x轴说明文字' 34 }, 35 min 如果是数值,那么最小值 36 max 如果是数值,那么最大值 37 categories 自定义x轴值,是个数组 38 39 yAxis (y轴的数据,是根据series下的data来自动填充的,如果需要格式化显示,labels--formatter) 40 title { 41 text: 'y轴说明文字' 42 }, 43 plotLines [//y轴自定义绘制线条,每个值都是一个对象 44 { 45 value 对应y轴数据,即定义线条的位置 46 width 线条宽度 47 color 颜色 48 } 49 ], 50 labels:{ 51 formatter:function() {//格式化显示数据,除了value变量外,还有axis(对象)、chart(对象)、isFirst(boolean)、isLast(boolean)可用 52 return this.value + 跟对应的操作,this.value 对应个就是y轴的值 53 }, 54 enabled: true表示展示该轴,false表示不展示 55 step:显示间隔,假如数值为1,2,3,4,5 ,设置为2只展示1,3,5 56 staggerLines:水平轴Lables显示行数。(该属性只对水平轴有效)当Lables内容过多时,可以通过该属性控制显示的行数。和该属性相关的还有maxStaggerLines属性。 57 } 58 59 60 61 tooltip:(对提示的配置,即鼠标悬浮时的提示) 62 crosshairs: 曲线图,显示竖条 (true,false) 63 valueSuffix: 添加后缀标识符 64 shared: true 展示对应列所有的数据,false 单单展示鼠标放置点的数据 65 66 headerFormat: 指定html文档的开始 67 pointFormat: 指定html中间信息 68 footerFormat: 指定html格式的结尾 69 userHTML: 是否开启html格式解析 70 71 series:值是个数组,数组里面一个值是个对象 72 [ 73 { 74 name: '', 数据的展示名称 75 data: [], 数据的值//null 表示没有,0表示0,不一样 76 }, 77 {} 78 ]
在项目中使用(备):
1 $.extend({ 2 table_png : function(res) {//曲线图图通用 3 Highcharts.setOptions({ 4 global: { 5 useUTC: false //关闭文件默认时区,采用数据时间显示 6 } 7 }); 8 res._this.highcharts('StockChart', { 9 title : { 10 text : res.title 11 }, 12 credits : { 13 enabled : false, 14 }, 15 exporting: { 16 enabled : false, 17 }, 18 rangeSelector: { 19 buttons : [ 20 { 21 type: 'week', 22 count: 1, 23 text: '一星期' 24 }, { 25 type: 'month', 26 count: 1, 27 text: '一个月' 28 }, { 29 type: 'month', 30 count: 6, 31 text: '半年' 32 }, { 33 type: 'year', 34 count: 1, 35 text: '一年' 36 }, { 37 type: 'all', 38 text: '全部' 39 }, { 40 type: 'ytd', 41 text: '今天' 42 } 43 ], 44 enabled : true, 45 buttonTheme: { 46 80, 47 }, 48 selected: 0, 49 allButtonsEnabled : false, 50 inputDateFormat: '%Y-%m-%d', 51 inputEditDateFormat: '%Y-%m-%d', 52 }, 53 legend : { 54 enabled: true, 55 backgroundColor: '#fff', 56 borderWidth:1, 57 layout: 'vertical', 58 verticalAlign: 'center', 59 x:450, 60 y:300 61 }, 62 xAxis : { 63 labels : { 64 format : '{value:%Y-%m-%d}', 65 rotation: 30, 66 align: 'left', 67 style : { 68 fontWeight : 'bold', 69 } 70 }, 71 title : { 72 text : '日期', 73 align: 'high', 74 }, 75 }, 76 77 yAxis : { 78 title : { 79 text : '值('+res.y_sign+')', 80 rotation: 0, 81 x:10, 82 y:-70, 83 }, 84 labels : { 85 format : '{value}', 86 }, 87 alternateGridColor: '#FDFFD5', //隔区变色 88 opposite: true, //y轴位置 left right 89 offset: 50, //y轴与数据区位置 90 }, 91 tooltip: { 92 enabled: true, 93 // type: 'datetime', 94 // dateTimeLabelFormats:{ 95 // day:'%Y-%m-%d' 96 // }, 97 formatter: function() { 98 var s = '<b>' + Highcharts.dateFormat(res.tool_format, this.x) + '</b>'; 99 $.each(this.points, function() { 100 s += '<br/>' + '<tspan style="fill:' + this.series.color + ';" x="8" dy="16">●</tspan>' + this.series.name + ':' + this.y; 101 }); 102 return s; 103 }, 104 crosshairs: [true, true], /*x+y数据标尺*/ 105 crosshairs: { 106 dashStyle: 'dash', 107 /*数据 标尺线样式*/ 108 color: 'red', 109 } 110 }, 111 /*下部时间拖拉选择*/ 112 navigator: { 113 enabled: true, 114 /*关闭时间选择*/ 115 baseseries: 10 116 }, 117 /*数据点设置*/ 118 plotOptions: { 119 series: { 120 marker: { 121 enabled: true, 122 /*数据点是否显示*/ 123 radius: 2, 124 /*数据点大小px*/ 125 fillColor:'#000' /*数据点颜色*/ 126 }, 127 dataLabels: { 128 enabled: false, 129 /*在数据点上显示数值*/ 130 format: '{y}' 131 },
lineWidth: 1,//线条宽度
dataGrouping: {
forced:true,//X轴显示数据正常
}
132 // enableMouseTracking: false /*关闭tip层*/ 133 } 134 }, 135 scrollbar: { 136 enabled: true /*关闭下方滚动条*/ 137 }, 138 series : res.data_obj 139 }); 140 }, 141 date_format : function(now) { 142
if(typeof now == 'object'){
var time_obj = new Date();
time_obj.setFullYear(parseInt(now.year),(parseInt(now.month) - 1),parseInt(now.day));
time_obj.setHours(parseInt(now.hour),parseInt(now.minute),parseInt(now.second));
return time_obj.getTime();
}else if(typeof now == 'string')
return new Date(now).getTime();
143 }, 144 pie_png : function(res) {//饼状图 145 res._this.highcharts({ 146 chart: { 147 plotBackgroundColor: null, 148 plotBorderWidth: null, 149 plotShadow: false 150 }, 151 title: { 152 text: res.title, 153 }, 154 tooltip: { 155 pointFormat: '{series.name}: <b>{point.percentage:.1f}%</b>' 156 }, 157 plotOptions: { 158 pie: { 159 allowPointSelect: true, 160 cursor: 'pointer', 161 dataLabels: { 162 enabled: true, 163 color: '#000000', 164 connectorColor: '#000000', 165 format: '<b>{point.name}</b>: {point.percentage:.1f} %' 166 } 167 } 168 }, 169 credits : { 170 enabled : false, 171 }, 172 series: [{ 173 type: 'pie', 174 name: res.series_name, 175 data: res.series_data, 176 }] 177 }); 178 } 179 });
调用:
//直接写在tpl模板文件中的,
1 <script type="text/javascript"> 2 $(document).ready(function() { 3 var data_arr = []; 4 var arr_temp = []; 5 $.ajax({ 6 url : THINK.URL + '/ajaxWeight',//THINK.URL 是通过js传值过来的 7 type : 'get', 8 dataType : 'json', 9 data : {'user_id':<?php echo $info['user_id'];?>}, 10 beforeSend : function() { 11 $('#table_png').html('加载数据中...'); 12 }, 13 success : function(res) { 14 if(res) { 15 $.each(res,function(i,n) { 16 arr_temp = []; 17 arr_temp.push($.date_format(n.weight_date)); 18 arr_temp.push(parseFloat(n.weight)); 19 data_arr.push(arr_temp);
//或者直接 data_arr.push([$.date_format(n.weight_date),parseFloat(n.wieght)]); 20 }); 21 $.table_png({ 22 _this : $('#table_png'), 23 title : '用户体重折线图', 24 data_obj : [{ 25 name : '用户体重', 26 data : data_arr, 27 }], 28 y_sign : 'kg', 29 }); 30 }else { 31 $('#table_png').html('没有找到任何数据'); 32 } 33 } 34 }); 35 }); 36 37 </script>
服务器端:
1 //ajax用户体重图表数据 2 public function ajaxWeight() { 3 $user_id = I('get.user_id',0); 4 5 //检查权限 6 $this->_checkPower($user_id); 7 8 $map['user_id'] = $user_id; 9 //获取体重详情 10 $user_weight_model = M('user_weight'); 11 $weight_info = $user_weight_model->field('weight_date,weight')->where($map)->order('weight_date asc')->select(); 12 if($weight_info === false) 13 die('error:服务器查询用户体重信息失败'); 14 15 echo json_encode($weight_info); 16 }
上面的代码实现的效果:
留个笔记,目前能用即可,详情的功能需要再研究