Highcharts项目实战(三)

爷,独闯天下 提交于 2020-01-25 07:33:28

Highcharts配置

之前已经将Highcharts的大致操作都讲了一遍,现在我来介绍下Highcharts的参数配置。

属性和事件

以下主要参考[参数配置](https://www.runoob.com/highcharts/highcharts-setting-detail.html)
chart.events.addSeries:添加数列到图表中。
//
// chart.events.click:整个图表的绘图区上所发生的点击事件。
//
// chart.events.load:图表加载事件。
//
// chart.events.redraw:图表重画事件,当点击图注显示和隐藏绘图时可以触发。
//
// chart.events.selection:当图表曲线可选择放大时,当选择图表操作时,可以触发该事件。
//
// chart.height:所绘制图表的高度值。
//
// chart.inverted:图表中的x,y轴对换。
//
// chart.polar:是否为极性图表。
//
// chart.reflow:当窗口大小改变时,图表宽度自适应窗口大小改变。
//
// chart.renderTo:图表加载的位置,是页面上的一个DOM对象。
//
// chart.showAxes:在空白图表中,是否显示坐标轴。
//
// chart.type:图表的类型,默认为line,还有bar/column/pie……
//
// chart.width:图表绘图区的宽度,默认为自适应。
//
// chart.zoomType:图表中数据报表的放大类型,可以以X轴放大,或是以Y轴放大,还可以以XY轴同时放大。
//
// colors:图表中多数列时,各数列之间的颜色。是一个数组,一般不动。
//
// credits.enabled:是否允许显示版权信息。
//
// credits.href:版权所有的链接。
//
// credits.text:版权信息显示文字。
//
// exporting.buttons.exportButton.enabled:是否允许显示导出按钮。
//
// exporting.buttons.exportButton.menuItems:导出按钮的菜单选项。
//
// exporting.buttons.exportButton.onclick:导出按钮被点击的事件,不是内部的菜单。
//
// exporting.buttons.printButton.enabled:是否允许打印按钮。
//
// exporting.buttons.printButton.onclick:打印按钮的点击事件。
//
// exporting.enabled:打印和导出按钮是否被允许。
//
// exporting.filename:被导出文件的文件名。
//
// exporting.type:默认导出图片的文件格式。
//
// exporting.url:SVG图表转换并导出的接口处理地址。
//
// exporing.width:默认导出图片的宽度。
//
// labels:标签,可以加载到图表的任何位置,里面有items,style。
//
// lang:语言参数配置,与导出按钮菜单有关的配置,时间名称的配置等。
//
// legend.enabled:是否允许图注。
//
// navigation.buttonOptions.enabled:图表中所有导航中的按钮是否可被点击。
//
// plotOptions.area.allowPointSelect:是否允许数据点的点击。
//
// plotOptions.area.color:绘图的颜色。
//
// plotOptions.area.dataLabels.enabled:是否允许数据标签。
//
// plotOptions.area.enableMouseTracking:是否允许数据图表中,数据点的鼠标跟踪气泡显示。
//
// plotOptions.area.events.checkboxClick:数据图表中图注中复选框的点击事件。
//
// plotOptions.area.events.click:数据图表中,数据点的点击事件。
//
// plotOptions.area.events.hide:数据图表中,某一数据序列隐藏时的事件。
//
// plotOptions.area.events.show:数据图表中,某一数据序列显示时的事件。
//
// plotOptions.area.events.legendItemClick:数据图表中,图注中的项目被点击时的事件,直接赋值false,则不可点击。
//
// plotOptions.area.events.mouseOut:数据点的鼠标移出事件。
//
// plotOptions.area.events.mouseOver:数据点的鼠标经过事件。
//
// plotOptions.area.marker.enabled:图表中绘图中是否显示点的标记符。
//
// plotOptions.area.marker.states.hover.enabled:是否允许标记符的鼠标经过状态。
//
// plotOptions.area.marker.states.select.enabled:是否允许标记符的选择状态。
//
// plotOptions.area.point.events.click:图表中每一个单独的点点击事件。
//
// plotOptions.area.point.events.mouseOut
//
// plotOptions.area.point.events..mouseOver
//
// plotOptions.area.point.events.remove:删除图表中的点时的事件。
//
// plotOptions.area.point.events.select:图表中点选择事件。
//
// plotOptions.area.point.events.unselect:图表中点取消选择时的事件。
//
// plotOptions.area.point.events.update:图表中数据发生更新时的事件。
//
// plotOptions.area.visible:加载时,数据序列默认是显示还是隐藏。
//
// plotOptions.area.zIndex:在多序列的情况下,调整每一个序列的层叠顺序。
//
// 以上的point.events同样还适用于其他面积类图表(arearange、areaspline、areasplinerange),其他的柱状图(bar、column)及所有图表。
//
// plotOptions.area.showInLegend:是否在图注中显示。
//
// plotOptions.area.stacking:是以值堆叠,还是以百分比堆叠。
//
// plotOptions.area.states.hover.enabled:鼠标放上的状态是否允许。
//
// plotOptions.area.stickyTracking:鼠标粘性跟踪数据点。
//
// plotOptions.arearange,plotOptions.areaspline,plotOptions.areasplinerange类同于plotOptions.area
//
// plotOptions.bar.groupPadding:对于柱状图分组,每个分组之间的间隔。
//
// plotOptions.bar.grouping:是否对数据进行分组。
//
// plotOptions.bar.minPointLength::定义当point值为零时,点的最小长度为多少
//
// plotOptions.bar.showInLegend:是否在图注中显示。
//
// plotOptions.bar.stacking:是以值堆叠,还是以百分比堆叠(normal/percent)。
//
// plotOptions.column,plotOptions.columnrange类同于plotOptions.bar
//
// plotOptions.line的相关配置类似于plotOptions.area配置。
//
// plotOptions.pie.ignoreHiddenPoint:在饼状图中,某一个序列经图注点击隐藏后,整个饼状图是重新以100%分配,还是只在原图基础上隐藏,呈现一个缺口。
//
// plotOptions.pie.innerSize:绘制饼状图时,饼状图的圆心预留多大的空白。
//
// plotOptions.pie.slicedOffset:与allowPointSelect结合使用,当点被点击时,对应的扇区剥离,这个参数即配置离开的距离。
//
// plotOptions.pie的其他常用配置参数类同于plotOptions.area,plotOptions.scatter,plotOptions.series,plotOptions.spline的相关配置类似于plotOptions.area配置。
//
// series:是一个数组。
//
// series.data.color:某一个数据的颜色。
//
// series.data.dataLabels:序列中某一个数据的数据标签。
//
// series.data.events类同于plotOptions.area.point.events的相关配置。
//
// series.data.marker类同于plotOptions.area.marker的相关配置。
//
// series.data.name:配置数据点的名称。
//
// series.data.sliced:配置在饼图中,扇区的分离距离大小。
//
// series.data.x:点的x值。
//
// series.data.y:点的y值。
//
// series.name:数据序列的名称。
//
// series.stack:堆叠的分组索引。
//
// series.type:数据序列的展示类型。
//
// series.xAxis,series.yAxis:当使用多坐标轴时,指定某个数列对应哪个坐标轴。
//
// subtitle:配置图表的子标题。
//
// title:配置图表的标题。
//
// tooltip:配置图表中数据的气泡提示。
//
// tooltip.valueDecimals:允许的小数点位数。
//
// tooltip.percentageDecimals:允许百分比的小数点后位数。
//
// xAxis,yAxis配置设置坐标轴
//
// allowDecimals:坐标轴上是否允许小数。
//
// categories:是一个数组,坐标轴的分类。
//
// plotLines:绘制主线。
//
// tickColor:刻度颜色。
//
// tickInterval:刻度的步进值。
//
// labels.rotation:刻度标签旋转度数

绘图

Highcharts功能已经十分强大,但还是不够解决实际项目中遇到的所有问题,特别是当需要使用画布进行绘制的时候。所幸Highcharts作为图表库,其本质还是JavaScript所以在实际项目中,HTML、CSS和JavaScript同样适用于Highcharts。
另外对于Highcharts形成的图形有一点是需要强调的,Highcharts底层其实是二/三次贝塞尔曲线。贝塞尔曲线是应用于二维图形应用程序的数学曲线。 一般的矢量图形软件(包括Highcharts和ECharts)都是通过它来精确画出曲线,我们在绘图工具上看到的钢笔工也是如此。所以对于生成的曲线与曲线的交点要特别注意,除非是使用标准函数生成否则生成的其实是拟合曲线,可以作为参考但是对于十分精准的测量建议慎用。
感兴趣的可以了解一下 可缩放矢量图形

总结

前面在文章最后提到了不少的问题,现在我做下解释。
先上代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>demo2</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 () {
            //图表构造函数Highcharts.Chart(),创建图表
            var chart = Highcharts.chart('container', {
                chart: {
                    type: 'scatter'
                },

                series: [{
                    data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4]
                },{
                    data:[]
                }]
            }/*,function(chart) {
                var pointIndex = 0,		//点索引
                    //数据列上点坐标
                    point = chart.series[0].points[pointIndex],
                    x = point.plotX + chart.plotLeft,
                    y = point.plotY + chart.plotTop;
//                    x = point.plotX,
//                    y = point.plotY
                    //绘制路径
                chart.renderer.path([
                    'M', 			//移动
                    x,
                    chart.plotTop + chart.plotHeight,
                    'L',			//划线
                    x,
                    y,
                    chart.plotLeft + chart.plotWidth,
                    y
                ])
                    .attr({			//属性
                        stroke: 'red',	//行程颜色
                        'stroke-width': 1,	//行程宽度
                        dashstyle: 'longdash'	//样式
                    })
                    .add();				//添加
            }*/);
            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[1].addPoint([c,d]);
                    /*chart.xAxis[0].addPlotLine({           //在x轴上增加
                        value:c,                           //在值为2的地方
                        width:2,                           //标示线的宽度为2px
                        color: '#000000',                  //标示线的颜色
                        id: 'plot-line-1',                  //标示线的id,在删除该标示线的时候需要该id标示
                        dashStyle:'longdashdot'
                    });*/
                    var pointIndex = 0;
//                    var group = this.renderer.g().add();
                    //数据列上点坐标
                   var point = chart.series[1].points[pointIndex],
                        x = point.plotX + chart.plotLeft,
                        y = point.plotY + chart.plotTop;
                    //绘制路径
                    lineRender = chart.renderer.path([
                        'M', 			//移动
                        x,
                        chart.plotTop + chart.plotHeight,
                        'L',			//划线
                        x,
                        y,
                        chart.plotLeft ,     //+ chart.plotWidth,
//                        0,
                        y
                    ])
                        .attr({			//属性
                            stroke: 'red',	//行程
                            'stroke-width': 1,	//行程宽度
                            id: 'plot-line-1',
                            dashstyle: 'longdashdot'	//样式
                        })
                        .add();				//添加
                        $button.html('删除标示线');

                } else {
//                    chart.xAxis[0].removePlotLine('plot-line-1');
//                    chart.renderer.path()
//                    chart.series[1].removePoint(x,y);
                    chart.series[1].data[0].remove();
//                    chart.renderer.lineRender.remove();
                    lineRender.destroy();

                    $button.html('新增标示线');
                }
//                .hide();
                hasPlotLine = !hasPlotLine;

            });

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

</body>
</html>

效果图如下:
根据输入值生成“L”辅助线

总结

之前提到的旋转“L”可以通过对绘图路径的x,y坐标进行测验得出结果,辅助线删除功能通过调用lineRender.destroy()方法进行销毁得出。
公司项目是暂时告一段落了,等有空我会把这段时间研究的相关项目代码放在GitHub上做学习参考。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!