Highcharts项目实战(二)

Highcharts

Highcharts 是一个用纯JavaScript编写的一个图表库,能够简单便捷的给web网站或者是web应用程序添加交互性的图表,而且最关键的是免费提供给个人学习、个人网站和非商业用途的使用。

HighCharts 特性

兼容性支持所有主流浏览器和移动平台(android、iOS等)
多设备支持多种设备,如手持设备 、平板等
免费使用供个人免费学习使用
配置简单json 格式配置
动态可以在图表生成后修改
多维支持多维图表
配置提示工具鼠标移动到图表的某一点上有提示信息
时间轴精确到毫秒
导出表格可导出为 PDF/ PNG/ JPG / SVG 格式
输出网页输出图表
可变焦选中图表部分放大,近距离观察图表
外部数据从服务器载入动态数据
文字旋转支持在任意方向的标签旋转

在学习过程中,我们可以发现正是因为Highcharts的这些特性才实现了Highcharts图表库的功能。同时基于这些特性,Highcharts支持近11种图表类型,包括曲线图、 区域图、饼图、散点图、气泡图、动态图表、组合图表、3D 图、测量图、热点图和树状图(Treemap)

实战案例

上篇文章讲述了Highcharts的基本配置和使用步骤,现在我们再讲述一个实例以供参考。

导入highcharts.js、jquery-1.8.3.min.js和data.js文件。下载链接如下:
https://pan.baidu.com/s/1jmGVUU-cCJZlk4gV7oazVg
提取码:fmfy

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>test</title>
    <script type="text/javascript" src="js/highcharts.js"></script>
    <script type="text/javascript" src="js/jquery-1.8.3.min.js"></script>
    <script type="text/javascript" src="js/data.js"></script>
    <script type="text/javascript">
        $(function () {
            var chart = Highcharts.chart('container', {
                chart: {
                    //鼠标点击基准线
                    events :{
                        click: function(e) {
                            var renderer = this.renderer,
					           x = e.chartX;
                            if(this.myPlotLine) {
                                this.myPlotLine.destroy();
                            }
                            this.myPlotLine = renderer.path(['M', x, this.plotTop, x, this.plotHeight + this.plotTop])
                                .attr({                 //属性
                                    stroke: 'red',      //颜色
                                    zIndex: 6,	        //索引
                                    'stroke-width': 1   //宽度
                                })
                                .add();                 //添加
                        }
                    },
                    type: 'scatter'
                },
                series: [{
                    data: [[52093,75.8],[67328,86.2],[75374,91.1],[81056,90.1],[85883,83.0],[93224,81.8]]
                },{
                    data :[[52093,57.40],[67328,58.74],[75374,58.85],[81056,59.01],[85883,59.28],[93224,59.01]]
                },{
                    data :[]
                }]
            });
            var hasPlotLine = false,
                $button = $('#button');
        $('#button').click(function () {
            var a = $('#XPoint').val();
            var b = $('#YPoint').val();
            var c = Number(a);
            var d = Number(b);
            if (!hasPlotLine) {
                // 新增的点包含 x 和 y 值
                chart.series[2].addPoint([ c,d]);
            chart.xAxis[0].addPlotLine({           //在x轴上增加
                value:c,                           //在值为2的地方
                width:2,                           //标示线的宽度为2px
                color: '#000000',                  //标示线的颜色
                id: 'plot-line-1',                  //标示线的id,在删除该标示线的时候需要该id标示
                dashStyle:'longdashdot'
            });
                $button.html('删除标示线');
            } else {
                chart.xAxis[0].removePlotLine('plot-line-1');
                chart.series[2].data[0].remove();
                $button.html('新增标示线');
            }
            hasPlotLine = !hasPlotLine;

        });
        });
    </script>
</head>
<body>
<div id="container"></div>
<input type="number" id="XPoint" name="test1"  size="28">
<input type="number" id="YPoint" name="test2"  size="28">
<button id="button" class="autocompare" onclick="GetText()" >新增点</button>

</body>
</html>

上述代码使用了Highcharts的画布工具Renderer,绘图工具是可以直接操作Highcharts的渲染层来绘制基础图形,包括绘制圆形、矩形等。在这里我用来绘制标示线,另外绘图工具是支持链式调用,也就是在创建绘图工具之后的语句依次调用attr、css、add等。详细内容请点击此处文字

 		var a = $('#XPoint').val();
        var b = $('#YPoint').val();
        var c = Number(a);
        var d = Number(b);

这里是有坑的,因为不管是使用JavaScript的document.getElementById()方法还是JQuery的$方法都是不能得到输入值的,因为获取的是一个Element对象,而在这里我们是取输入的数字。所以在获取Element对象之后还需要进行强转换下类型。
另外仔细观察代码会发现,我们使用了一个空的数据列data[]数组来接受输入的数字。在输入x,y坐标之后,使用chart.series[2].addPoint()方法输入点,使用chart.xAxis[0].addPlotLine()方法添加标示线,最后使用chart.series[2].data[0].remove()和chart.xAxis[0].removePlotLine()方法分别对输入数据点和标示线进行删除操作。

总结

文章到此已经是告一段落了,不过还有很多可以改良的地方。比如说对数据进行json封装,使用数据库进行数据的动态交互功能等等。最后我有一个猜想和一个问题:运行上述代码你会发现输入点会随着数据列的增多而不太明显,如果用一个旋转90°的“L”来表示是不是会好些,“L”又能不能旋转270°呢,能不能让输入点和“L”标示线同时出现和消失呢。
此处例子仅供参考

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值