在此之前使用了Chart.js、Highcharts,首先了解一下这两款插件的优势与不足,然后再来了解jqplot。
1.Chart
Chart中文官网:http://chartjs.cn/
1.1优势:
1.1.1Chart是一个基于HTML5标签canvas来开发的纯javascript图表库,Chart.js(44KB)Chart.min.js(20KB),只需要引用一个文件即可搞定,用起来非常干净舒服。
1.1.2Chart可以支持六种图标类型:折线图(Line)、柱形图(Bar)、饼形图(Pie)、环饼图(Doughnut)、雷达图(Radar)、级地图(PolarArea)
1.2缺点:
1.2.1缺乏对每个色块提示所代表的数据意义文字说明,例如:折线统计图出现多条折线时每条折线所代表的数据意义
1.2.2缺少对折线焦点的详细数据说明,例如:折线或柱形每个节点的具体数据值显示
1.2.3.缺少对折线图X,Y轴注释说明及数据单位标注,例如:需要对折线图标注Y轴代表的是交易金额
2.Highcharts
Highcharts中文官网:http://www.hcharts.cn/
2.1优势
2.1.1Highcharts是一个图表类型丰富,效果酷炫,功能强大于一身的javascript图表库
2.1.21Highcharts支持曲线图、区域图、柱状图、饼状图、散状点图和综合图表,并且还可以定制自己想要的效果。
2.2缺点
2.2.1Highcharts分为个人版和商业版,一些复杂的效果需要单独收费。
3.jqplot
这里主要说一下jqplot,因为经过对比,最终项目选择了它,然而jqplot也是一个非常强大的JS图表插件。
jqplot为基于JQuery的一款图表插件,可扩展性强,关键是开源。
由于jqplot文档下有许多分别在不同场景下使用的插件,所以这里做一个简单的介绍。
jqplot官方下载地址:http://www.jqplot.com/
目前最新的版本是jquery.jqplot.1.0.9.d96a669.zip
解压后各文件的使用方法:
如果无需特殊配置,可直接引入jqplot主文件即可。
<script src="~/Scripts/jquery.jqplot/jquery.min.js"></script>
<script src="~/Scripts/jquery.jqplot/jquery.jqplot.min.js"></script>
<link href="~/Scripts/jquery.jqplot/jquery.jqplot.min.css" rel="stylesheet" />
*如果你的浏览器不支持HTML5的canvas,那么必须要引入“excanvas.js”,plugins文件夹下为jqplot扩展功能的JS库。
重要:plugins下各JS库的作用
1.plugins/jqplot.barRenderer.min.js
主要用于显示刻度为日期格式的坐标轴,它增强了javascript的本地数据处理能力,它几乎支持所有的日期格式。
另外还提供了强大的格式化功能,它能将数据中日期字符串格式化为你需要的格式并显示在坐标轴的刻度线上。
2.plugins/jqplot.categoryAxisRenderer.min.js
主要用于将显示于刻度处的值显示与两个刻度之间,当然其表达意思也发生变化,因为刻度值处值表示某个点处的值,而它则代表某个范围内的值。
比较适合与柱状图联合使用。
3.plugins/jqplot.barRenderer.min.js
主要用于显示柱状图,能够很好的控制每个组(位于一个刻度值处的各个分类)内及组间距离,并且该柱状图能够水平显示。
4.plugins/jqplot.cursor.min.js
主要用于鼠标移动到图中时,鼠标在图中显示形式,常用与和高亮功能同时使用。
5.plugins/jqplot.highlighter.min.js
主要用于当鼠标移动到图中数据点上时,在鼠标附近显示提示栏,并将相关信息显示在提示栏。默认显示值是横纵坐标轴刻度值。当然,提示框中信息是可以根据自身需要定制的。
6.plugins/jqplot.logAxisRenderer.min.js
主要用于以指数计算的方式生成坐标轴上刻度值。默认情况下,刻度值是均匀显示的,但是刻度值也可以按指数增长的方式显示。
7.plugins/jqplot.ohlcRenderer.min.js
主要用于显示甘特图。通常情况下,该渲染器与dateAxisRenderer一起使用较多
8.plugins/jqplot.dragable.min.js
用户能够拖动某个数据点,jqplot会自动重画拖动后的新图表。同时,被拖动的数据点的数据值也随着拖动发生变化。
9.plugins/jqplot.trendline.min.js
主要用于对现有数据进行线性回归计算,并自动将计算结果以趋势线的形式展示出来,当用户拖动某个数据点时,趋势线亦随用户拖动而变化。
10.plugins/jqplot.pointLabels.min.js
主要用于将数据节点相关的的信息以标签的方式放于该数据节点附近;对于相应数据为空的,其标签不显示。
有了以上对每个插件的介绍,在实际使用中才能更好的、灵活的去实现需要展示的效果。
1.jqplot折线图
下面的列举折线图常用的一些配置,可以直接复制代码,根据参数配置说明调试出想要的折线图表效果
插件引入
<!--[if lt IE ]><script type="javascript" type="text/javascript" src="excanvas.js"></script><![endif]-->
<script src="~/Scripts/jquery.jqplot/jquery.jqplot.min.js"></script>
<script src="~/Scripts/jquery.jqplot/plugins/jqplot.highlighter.js"></script>
<script src="~/Scripts/jquery.jqplot/plugins/jqplot.cursor.js"></script>
<script src="~/Scripts/jquery.jqplot/plugins/jqplot.canvasTextRenderer.js"></script>
<script src="~/Scripts/jquery.jqplot/plugins/jqplot.canvasAxisTickRenderer.js"></script>
<script src="~/Scripts/jquery.jqplot/plugins/jqplot.categoryAxisRenderer.js"></script>
<script src="~/Scripts/jquery.jqplot/plugins/jqplot.pointLabels.js"></script>
<script src="~/Scripts/jquery.jqplot/plugins/jqplot.dateAxisRenderer.js"></script>
<script src="~/Scripts/jquery.jqplot/plugins/jqplot.barRenderer.js"></script> <link href="~/Scripts/jquery.jqplot/jquery.jqplot.min.css" rel="stylesheet" />
Html添加容器来承载图表
<div id="UserChart" style=" width:1000px; height:400px;"></div>
传递数据并显示图表
//$.jqplot('target', data, options);//target:目标位置(目标元素ID)。data:用于图标显示的几组数据源。options:对图片显示的个性化配置参数。
$.jqplot('UserChart',
[
[['2016-05-12', 5], ['2016-05-11', 10], ['2016-05-10', 15], ['2016-05-09', 20], ['2016-05-08', 25],
['2016-05-07', 50], ['2016-05-06', 100], ['2016-05-05', 120], ['2016-05-04', 150], ['2016-05-03', 180],
['2016-05-02', 200], ['2016-05-01', 220], ['2016-04-30', 210], ['2016-04-29', 240], ['2016-04-28', 270],
['2016-04-27', 290], ['2016-04-26', 300], ['2016-04-25', 350], ['2016-04-24', 390], ['2016-04-23', 580]]
//[[1,2], [3, 5.12], [5, 13.1], [7, 33.6], [9, 85.9], [11, 219.9]]//如果不配置axes则可以直接通过data配置(X,Y)给定当前位置
],
{
//图标标题
title: {
text: '近一个月用户量信息',
show: true,
fontFamily: "Microsoft Yahei",
fontSize: "15pt",//pt磅,em相对字体大小
textColor: "#000"
},
//提示栏显示配置,通常在右上角显示
legend: {
show: true,
location: 'ne',// 提示栏信息显示位置(英文方向的首写字母): n, ne, e, se, s, sw, w, nw.
placement: 'outside'
},
//提示栏显示信息配置,多个数据分类需配置多个
series: [{
label: '平台用户',//按data先后顺序显示每种分类名称
markerOptions:
{
size: 6,
style: 'circle'
}
},
{
label: '普通注册',
markerOptions:
{
size: 4,
style: 'circle'
}
},
{
label: '机构注册',
markerOptions:
{
size: 4,
style: 'circle'
}
}
],
//节点数值提示,需要引用jqplot.pointLabels.js
seriesDefaults:{
pointLabels: { show: true, ypadding: -1 } //数据点标签
},
//鼠标放在节点时突出显示当前结点,需引用jqplot.highlighter.js
highlighter: {
show: true,
sizeAdjust: 6,//当鼠标移动到数据点上时,数据点扩大的增量
fadeTooltip: true,//设置提示信息栏出现和消失的方式(是否淡入淡出)
lineWidthAdjust: 2.5, //当鼠标移动到放大的数据点上时,设置增大的数据点的宽度
tooltipOffset: 2, // 提示信息栏据被高亮显示的数据点的偏移位置,以像素计
tooltipLocation: 'nw' // 提示信息显示位置(英文方向的首写字母): n, ne, e, se, s, sw, w, nw.
},
//鼠标在图标中的提示位置信息,需引用jqplot.cursor.js
cursor: {
show: true,
showTooltip: true,// 是否显示提示信息栏
followMouse: false, //光标的提示信息栏是否随光标(鼠标)一起移动
tooltipLocation: 'se', // 光标提示信息栏的位置设置。如果followMouse=true,那么该位置为
//提示信息栏相对于光标的位置。否则,为光标提示信息栏在图标中的位置
// 该属性可选值: n, ne, e, se, etc.
tooltipOffset: 6, //提示信息栏距鼠标(followMouse=true)或坐标轴(followMouse=false)的位置
},
//设置X,Y轴默认加载方式
axesDefaults: {
tickRenderer: $.jqplot.CanvasAxisTickRenderer,// 设置横(纵)轴上数据加载的渲染器,需引用jqplot.canvasAxisTickRenderer.js
tickOptions: {
angle: 270, //倾斜角度,需引用jqplot.canvasTextRenderer.js
fontSize: '10pt'
}
},
axes: {
xaxis: {
label: "日期", //x轴显示标题
renderer: $.jqplot.CategoryAxisRenderer, //x轴绘制方式
ticks: [], //设置横(纵)坐标的刻度上的值,可为该ticks数组中的值// a 1D [val1, val2, ...], or 2D [[val, label], [val, label], ...]
tickOptions: {
labelPosition: 'end',//start,middle,auto,end
}
},
yaxis: {
label: "用户量", // y轴显示标题
min: 0,//Y轴最小值
//tickOptions: { formatString: '%.2f', fontSize: '10pt' }//带有两位浮点小数
}
}
});
折线图效果:
aaarticlea/png;base64,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" alt="" />
如果又需要的话,我们可以把绘制图表的配置按照自己喜欢的样子设置默认参数,然后作为常用JQ插件保存起来,这样在以后使用时就方便多了。
下面是对折线图做了插件库的封装,下次使用时我们只需要传入表格title,横纵坐标名称和每条折线的名称即可快速绘制出折线统计图,如果有需要可以继续扩展此JS文件。
/*注册用户量统计*/
(function ($) {
$.ajaxDataRenderer = function (TargetId, url,titleName ,xaxisName, yaxisName, seriesArray) {
$.ajax({
async: false,
url: url,
dataType: "json",
success: function (msg) {
var dataValue = new Array(); //数据
for (var i = 0; i < msg.length; i++)
{
dataValue[i] = new Array();
for (var key in msg[i])
{
var LineValue = new Array();
LineValue.push(key, msg[i][key])
dataValue[i].push(LineValue);
//dataValue[i][key] = msg[i][key];
}
} var plot1 = $.jqplot(TargetId, dataValue, OptionLine(titleName, xaxisName, yaxisName, seriesArray));
plot1.replot();//释放绘画对象
},
error: function () {
alert("数据接收错误");
}
});
};
//折线数据设置
var DataLine = [
[['2016-05-12', 5], ['2016-05-11', 10], ['2016-05-10', 15], ['2016-05-09', 20], ['2016-05-08', 25],
['2016-05-07', 50], ['2016-05-06', 100], ['2016-05-05', 120], ['2016-05-04', 150], ['2016-05-03', 180],
['2016-05-02', 200], ['2016-05-01', 220], ['2016-04-30', 210], ['2016-04-29', 240], ['2016-04-28', 270],
['2016-04-27', 290], ['2016-04-26', 300], ['2016-04-25', 350], ['2016-04-24', 390], ['2016-04-23', 580]]
]
//折线参数设置
var OptionLine = function (titleName,xaxisName, yaxisName, seriesArray) {
return {
//图标标题
title: {
text: titleName,
show: true,
fontFamily: "Microsoft Yahei",
fontSize: "15pt",
textColor: "#000"
},
//提示栏显示配置,通常在右上角显示
legend: {
show: true,
location: 'ne',// 提示栏信息显示位置(英文方向的首写字母): n, ne, e, se, s, sw, w, nw.
placement: 'outside'
},
//提示栏显示信息配置,多个数据分类需配置多个
series: [{
label: seriesArray[0],//按data先后顺序显示每种分类名称
markerOptions:
{
size: 6,
style: 'circle'
}
},
{
label: seriesArray[1],
markerOptions:
{
size: 4,
style: 'circle'
}
},
{
label: seriesArray[2],
markerOptions:
{
size: 4,
style: 'circle'
}
}
],
//节点数值提示,需要引用jqplot.pointLabels.js
seriesDefaults: {
pointLabels: { show: false, ypadding: -1 } //数据点标签
},
//鼠标放在节点时突出显示当前结点,需引用jqplot.highlighter.js
highlighter: {
show: true,
sizeAdjust: 6,//当鼠标移动到数据点上时,数据点扩大的增量
fadeTooltip: true,//设置提示信息栏出现和消失的方式(是否淡入淡出)
lineWidthAdjust: 2.5, //当鼠标移动到放大的数据点上时,设置增大的数据点的宽度
tooltipOffset: 2, // 提示信息栏据被高亮显示的数据点的偏移位置,以像素计
tooltipLocation: 'nw' // 提示信息显示位置(英文方向的首写字母): n, ne, e, se, s, sw, w, nw.
},
//鼠标在图标中的提示位置信息,需引用jqplot.cursor.js
cursor: {
show: true,
showTooltip: true,// 是否显示提示信息栏
followMouse: false, //光标的提示信息栏是否随光标(鼠标)一起移动
tooltipLocation: 'nw', // 光标提示信息栏的位置设置。如果followMouse=true,那么该位置为
//提示信息栏相对于光标的位置。否则,为光标提示信息栏在图标中的位置
// 该属性可选值: n, ne, e, se, etc.
tooltipOffset: 6, //提示信息栏距鼠标(followMouse=true)或坐标轴(followMouse=false)的位置
useAxesFormatters: false,// 提示信息框中数据显示的格式是否和该数据在坐标轴上显示格式一致
},
//设置X,Y轴默认加载方式
axesDefaults: {
tickRenderer: $.jqplot.CanvasAxisTickRenderer,// 设置横(纵)轴上数据加载的渲染器,需引用jqplot.canvasAxisTickRenderer.js
tickOptions: {
angle: 270, //倾斜角度,需引用jqplot.canvasTextRenderer.js
fontSize: '10pt'
}
},
axes: {
xaxis: {
label: xaxisName, //x轴显示标题
renderer: $.jqplot.CategoryAxisRenderer, //x轴绘制方式
ticks: [], //设置横(纵)坐标的刻度上的值,可为该ticks数组中的值// a 1D [val1, val2, ...], or 2D [[val, label], [val, label], ...]
tickOptions: {
labelPosition: 'end',//start,middle,auto,end
}
},
yaxis: {
label: yaxisName, // y轴显示标题
min: 0,//Y轴最小值
//tickOptions: { formatString: '%.2f', fontSize: '10pt' }//带有两位浮点小数
}
}
}
}; })(jQuery);
绘图jqplot插件进一步封装
使用时一行代码搞定
$.ajaxDataRenderer("UserChart", "/Summary/Analyse/MonthUserTrend","近一个月用户注册量","日期","用户量",new Array("平台用户","理财经理","产品经理"));