第 12 章 ? Bootstrap响应式图表设计 ? 本章介绍基于Bootstrap框架的响应式图表设计。其实,在Bootstrap框架中并没有提供完整的响应式图表功能,不过可以引入强大的、基于JavaScript的、完全开源的第三方图表插件,并基于Bootstrap框架良好的兼容性来整合这些第三方插件,最终设计出性能优越的响应式图表。 本章主要内容包括: ? 柱状图图表的设计 ? 折线图图表的设计 ? 饼状图图表的设计 12.1 图表设计概述 首先,介绍一款开源的、基于JavaScript的图形图表插件 —— ECharts,该插件功能很强大,可以帮助开发者实现各种功能的图表。 ECharts插件是一款基于Canvas的图表库,提供直观、生动、可交互、可个性化定制的数据可视化图表。ECharts创新的拖拽重计算、数据视图、值域漫游等特性大大增强了用户体验,赋予了用户对数据进行挖掘、整合的能力。 ECharts提供的图形图表包括:折线图(区域图)、柱状图(条状图)、散点图(气泡图)、饼状图(环形图)、K线图、地图和弦图以及力导向布局图等,同时支持任意维度的堆积和多图表混合展现。在本章的应用中,选取其中比较基础的柱状图、折线图和饼状图来整合Bootstrap框架进行开发。 为了实现基于Bootstrap框架的响应式图表的设计,引用了Bootstrap框架、jQuery框架和ECharts插件所需要的脚本文件、样式文件和资源文件,并自定义了相关样式文件和资源文件。具体源代码目录如图12.1所示。 图12.1 源代码目录 如图12.1所示,index.html文件为响应式图表的页面,dist文件夹用于存放Bootstrap框架、jQuery框架和ECharts插件的脚本文件、样式文件和字体样式文件;assets文件夹用于存放自定义的辅助脚本文件和样式文件。 下面是页面所引用的部分重要css样式文件的代码。 【代码12-1】(详见源代码ch12目录中index.html文件) 01 02 03 04 05 06 下面是页面所引用的部分重要js脚本文件的代码。 【代码12-2】(详见源代码ch12目录中index.html文件) 01 02 03 04 05 06 07 08 09 10 11 12 12.2 柱状图图表 本节介绍柱状图图表的设计过程。首先,需要添加DOM元素,并且为该DOM元素添加宽高设定。下面是相关的代码。 【代码12-3】(详见源代码ch12目录中index.html文件) 01
02

Bootstrap 图表

03

04 ...... 05
关于【代码12-3】的分析如下: 第03行代码通过div标签元素定义了一个id值为"id-echart-bar"的显示图表区域,同时定义了图表的高度和宽度样式(style="height:500px;width:650px;")。 然后,继续添加关于ECharts插件所需的模块加载器的配置和所需图表的路径。 【代码12-4】(相对路径为从当前页面链接到echarts.js) 01 require.config({ 02 paths: { 03 echarts: 'http://echarts.baidu.com/build/dist' 04 } 05 }); 关于【代码12-4】的分析如下: 这段代码主要通过require.config()方法来配置加载器路径,而paths参数用于定义具体路径。 最后,定义echarts图表所需加载的数据,回调函数中可以初始化图表并驱动图表的生成。 【代码12-5】 01 require( 02 [ 03 'echarts', 04 'echarts/chart/bar' // 使用柱状图需加载bar模块,此处可按需加载 05 ], 06 function (ec) { 07 // 基于准备好的dom,初始化echarts图表 08 var barChart = ec.init(document.getElementById('id-echart-bar')); 09 var barOption = { 10 title: { 11 text: 'ECharts 柱状图表示例' 12 }, 13 tooltip: { 14 show: true 15 }, 16 legend: { 17 data:['编程语言喜欢度百分比(%)'] 18 }, 19 xAxis: [ 20 { 21 data : ["C&C++","Java","JavaScript","jQuery","Bootstrap","PHP"] 22 } 23 ], 24 yAxis: [ 25 { 26 type : 'value', 27 axisLabel: { 28 formatter: '{value} %' 29 } 30 } 31 ], 32 series: [ 33 { 34 "name":"喜欢度", 35 "type":"bar", 36 "data":[50, 70, 90, 60, 80, 65] 37 } 38 ] 39 }; 40 // 为echarts对象加载数据 41 barChart.setOption(barOption); 42 } 43 ) 关于【代码12-5】的分析如下: 第01~43行代码通过require()方法配置加载ECharts插件图表。 第02~05行代码用于加载柱状图所需的bar模块,此处可以根据需要加载指定的ECharts图表模块。 第08行代码用于获取【代码12-3】中第03行代码定义的DOM元素对象,后续将在该元素内显示柱状图图表。 第09~39行代码用于初始化定义柱状图图表参数;其中,第10~12行代码通过title属性定义图表标题;第13~15行代码用于定义是否显示提示信息("show: true");第16~18行代码通过legend属性定义图表副标题;第19~23行代码通过xAxis属性定义图表X方向坐标;第24~31行代码通过yAxis属性定义图表Y方向坐标;第32~38行代码通过series属性定义柱状图的初始化参数。 第41行代码通过setOption()方法为echarts对象加载上面定义好的数据(通过第09行代码定义的barOption变量)。 下面测试一下该页面,柱状图图表的效果如图12.2所示。 图12.2 柱状图图表 12.3 折线图图表 本节介绍折线图图表的设计过程。首先,在页面需要添加图表的地方增加DOM元素,并且为该DOM元素添加宽高设定。下面是相关的代码。 【代码12-6】(详见源代码ch12目录中index.html文件) 01
02

Bootstrap 图表

03 ...... 04

05 ...... 06
关于【代码12-6】的分析如下: 第04行代码通过div标签元素定义了一个id值为"id-echart-line"的显示图表区域,同时定义了图表的高度和宽度样式(style="height:500px;width:650px;")。 然后,继续添加关于ECharts插件所需的模块加载器的配置和所需图表的路径。 【代码12-7】(相对路径为从当前页面链接到echarts.js) 01 require.config({ 02 paths: { 03 echarts: 'http://echarts.baidu.com/build/dist' 04 } 05 }); 关于【代码12-7】的分析如下: 这段代码主要通过require.config()方法来配置加载器路径,而paths参数用于定义具体路径。 最后,定义echarts图表所需加载的数据,回调函数中可以初始化图表并驱动图表的生成: 【代码12-8】 01 require([ 02 'echarts', 03 'echarts/chart/line' // 使用折线图需加载line模块,此处可按需加载 04 ], 05 var lineChart = ec.init(document.getElementById('id-echart-line')); 06 var lineOption = { 07 title: { 08 text: '未来一周气温变化', 09 subtext: '虚构图表' 10 }, 11 tooltip: { 12 trigger: 'axis' 13 }, 14 legend: { 15 data: ['最高气温', '最低气温'] 16 }, 17 toolbox: { 18 show: true, 19 feature: { 20 mark: { 21 show: true 22 }, 23 dataView: { 24 show: true, 25 readOnly: false 26 }, 27 magicType: { 28 show: true, 29 type: ['line', 'bar'] 30 }, 31 restore: { 32 show: true 33 }, 34 saveAsImage: { 35 show: true 36 } 37 } 38 }, 39 calculable: true, 40 xAxis: [{ 41 type: 'category', 42 boundaryGap: false, 43 data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日'] 44 }], 45 yAxis: [{ 46 type: 'value', 47 axisLabel: { 48 formatter: '{value} °C' 49 } 50 }], 51 series: [{ 52 name: '最高气温', 53 type: 'line', 54 data: [11, 11, 15, 13, 12, 13, 10], 55 markPoint: { 56 data: [{ 57 type: 'max', 58 name: '最大值' 59 }, { 60 type: 'min', 61 name: '最小值' 62 }] 63 }, 64 markLine: { 65 data: [{ 66 type: 'average', 67 name: '平均值' 68 }] 69 } 70 }, { 71 name: '最低气温', 72 type: 'line', 73 data: [1, -2, 2, 5, 3, 2, 0], 74 markPoint: { 75 data: [{ 76 name: '周最低', 77 value: -2, 78 xAxis: 1, 79 yAxis: -1.5 80 }] 81 }, 82 markLine: { 83 data: [{ 84 type: 'average', 85 name: '平均值' 86 }] 87 } 88 }] 89 }; 90 // 为echarts对象加载数据 91 lineChart.setOption(lineOption); 92 ) 关于【代码12-8】的分析如下: 第01~92行代码通过require()方法配置加载ECharts插件图表。 第03行代码用于加载折线图所需的line模块,此处可以根据需要加载指定的ECharts图表模块。 第05行代码用于获取【代码12-6】中第04行代码定义的DOM元素对象,后续将在该元素内显示折线图图表。 第07~89行代码用于初始化定义折线图图表参数。 第07~10行代码通过title属性定义图表标题。 第11~13行代码用于定义是否显示提示信息("show: true")。 第14~16行代码通过legend属性定义图表副标题。 第17~38行代码通过toolbox属性定义图表工具箱(显示在图12.3的右上角)。 第39行代码通过calculable属性定义图表的可拖拽计算特性(calculable: true)。 第40~44行代码通过xAxis属性定义图表X方向坐标。 第45~50行代码通过yAxis属性定义图表Y方向坐标。 第51~88行代码通过series属性定义两条折线图(最高气温折线图和最低气温折线图)的初始化参数。 第91行代码通过setOption()方法为echarts对象加载上面定义好的数据(通过第06行代码定义的lineOption变量)。 下面测试一下该页面,折线图图表的效果如图12.3所示。 图12.3 折线图图表 12.4 饼状图图表 本节介绍饼状图图表的设计过程。首先,在页面需要添加图表的地方增加DOM元素,并且为该DOM元素添加宽高设定。下面是相关的代码。 【代码12-9】(详见源代码ch12目录中index.html文件) 01
02

Bootstrap 图表

03 ...... 04

05 ...... 06
关于【代码12-9】的分析如下: 第04行代码通过div标签元素定义了一个id值为"id-echart-pie"的显示图表区域,同时定义了图表的高度和宽度样式(style="height:500px;width:650px;")。 然后,继续添加关于ECharts插件所需的模块加载器的配置和所需图表的路径。 【代码12-10】(相对路径为从当前页面链接到echarts.js) 01 require.config({ 02 paths: { 03 echarts: 'http://echarts.baidu.com/build/dist' 04 } 05 }); 关于【代码12-10】的分析如下: 这段代码主要通过require.config()方法来配置加载器路径,而paths参数用于定义具体路径。 最后,定义echarts图表所需加载的数据,回调函数中可以初始化图表并驱动图表的生成: 【代码12-11】 01 require( 02 [ 03 'echarts', 04 'echarts/chart/pie' // 使用饼状图需加载pie模块,此处可按需加载 05 ], 06 var pieChart = ec.init(document.getElementById('id-echart-pie')); 07 var pieOption = { 08 title: { 09 text: '家庭支出', 10 subtext: '虚构图表', 11 x: 'center' 12 }, 13 tooltip: { 14 trigger: 'item', 15 formatter: "{a}
{b} : {c} ({d}%)" 16 }, 17 legend: { 18 orient: 'vertical', 19 x: 'left', 20 data: ['日常开支', '投资理财', '奢侈消费', '子女教育', '家庭备用金'] 21 }, 22 toolbox: { 23 show: true, 24 feature: { 25 mark: { 26 show: true 27 }, 28 dataView: { 29 show: true, 30 readOnly: false 31 }, 32 magicType: { 33 show: true, 34 type: ['pie', 'funnel'], 35 option: { 36 funnel: { 37 x: '25%', 38 width: '50%', 39 funnelAlign: 'left', 40 max: 1548 41 } 42 } 43 }, 44 restore: { 45 show: true 46 }, 47 saveAsImage: { 48 show: true 49 } 50 } 51 }, 52 calculable: true, 53 series: [{ 54 name: '支出类型', 55 type: 'pie', 56 radius: '55%', 57 center: ['50%', '60%'], 58 data: [{ 59 value: 3000, 60 name: '日常开支' 61 }, { 62 value: 3200, 63 name: '投资理财' 64 }, { 65 value: 1000, 66 name: '奢侈消费' 67 }, { 68 value: 1600, 69 name: '子女教育' 70 }, { 71 value: 1600, 72 name: '家庭备用金' 73 }] 74 }] 75 }; 76 // 为echarts对象加载数据 77 pieChart.setOption(pieOption); 78 ) 关于【代码12-11】的分析如下: 第01~78行代码通过require()方法配置加载ECharts插件图表。 第04行代码用于加载饼状图所需的pie模块,此处可以根据需要加载指定的ECharts图表模块。 第06行代码用于获取【代码12-9】中第04行代码定义的DOM元素对象,后续将在该元素内显示饼状图图表。 第07~75行代码用于初始化定义饼状图图表参数。 第08~12行代码通过title属性定义图表标题。 第13~16行代码用于定义是否显示提示信息("show: true"),第15行代码通过formatter属性定义格式化参数。 第17~21行代码通过legend属性定义图表副标题。 第22~51行代码通过toolbox属性定义图表工具箱(显示在图12.4的右上角)。 第52行代码通过calculable属性定义图表的可拖拽计算特性(calculable: true)。 第53~74行代码通过series属性定义饼状图的初始化参数。 第77行代码通过setOption()方法为echarts对象加载上面定义好的数据(通过第07行代码定义的pieOption变量)。 下面测试一下该页面,饼状图图表的效果如图12.4所示。 图12.4 饼状图图表 12.5 本章小结 本章主要介绍了应用Bootstrap框架和ECharts插件设计响应式图表的方法,主要包括柱状图图表、折线图图表和饼状图图表等方面的内容,希望对读者有一定的帮助。