HighCharts实现多数据折线图分列显示

HighCharts实现多数据折线图分列显示

BY ZYZ

HighCharts是一个非常好用的web端画图插件,用起来非常方便,它的官方支持非常好,而且有中文API(不完全),画出来的图像也挺漂亮的。最近需要用HighCHarts绘制多数据展示对比的折线图,要求的效果类似下图。

这个图的特点是Y轴从大到小显示,多个X轴对应多个不同的折线,且每个X轴的刻度不同,每条折线的颜色也不同,且折线不交叉。

在官方的在线演示里找了许久,并没有发现可以实现这样效果的例子,虽然有多轴多折线显示的例子,但是折线会交叉,不满足要求。估计是这样的效果很少会被用到,所以演示里面没有。遂去查找API,API里也没有发现类似的设置(可能是个人疏忽没有找到,如果有朋友知道如何实现的话望留言告知,谢谢)。

我最后采用了拼接的方式实现这个效果,大概原理就是对每一条折线单独作图,最后将所有画板左右结合实现上图的效果。

具体用法如下:

1.为画图准备好数据,根据API中对数据的要求(http://www.hcharts.cn/api/index.php#series.data)将数据做如下处理。

        //获取并处理数据成HighChart可用的结构
        function ShowFluidProporties(wellID) {
            var arrayALL = [];//装载所有折线
            $.post('Ajax/GetFluidProportiesHandler.ashx', { WellID: wellID },
            function (data) {
                var json = eval('(' + data + ')');
                var rows = json.rows;
                var tempPoint = [];//临时装载每个点中的X,Y值
                var tempLine = [];//临时装载每条折线中的所有点
                for (var j = 0; j < arrayTitle.length; j++) {
                    for (var i = 0; i < json.total; i++) {
                        //制造点数据
                        tempPoint.push(Number(rows[i][arrayTitle[j]]), Number(rows[i].SamplingWellDepth));
                        //为折线添加点
                        tempLine.push(tempPoint);
                        //清空临时点
                        tempPoint = [];
                    }
                    //将折线添加到折线集合里
                    arrayALL.push(tempLine);
                    //清空临时折线
                    tempLine = [];
                }
                //利用折线集合作图
                if (arrayALL) ShowLines(arrayALL);
            });
        }

函数中的data是在服务器获取的,适用于EasyUI中datagrid的json字符串。

其中的arrayTitle在函数前定义。

//需要显示的数据列的列名集
        var arrayTitle = ['Density', 'ECD', 'Viscosity', 'R600', 'R300', 'R200', 'R100', 'R6', 'R3'];

2.由于每条折线大体上是差不多的,所以为折线图设置一个通用属性,我只做了简单注释,具体用法详见API。

//折线图的画图属性
        var options = {
            chart: {
                renderTo: '',//折线位置
                type: 'line',//表明是折线图
                spacingTop: 25, //图框离上方控件的距离
                spacingBottom: 10,//图框离下方控件的距离
                marginLeft: 0, //折线图的左边距
                marginRight: 0//折线图的右边距
            },
            title: { text: '' }, //折线图的标题
            credits: { enabled: false }, //是否显示版权信息
            plotOptions: {
                line: {
                    marker: {
                        enabled: false//是否显示点标记
                    }
                }
            },
            xAxis: {
                lineColor: '', //边框线颜色
                tickColor: '', //刻度线颜色
                maxPadding: 0.2,//折线最大处距离刻度线的距离相对于刻度线长度的比值
                minPadding: 0.2,//折线最小处距离刻度线的距离相对于刻度线长度的比值
                gridLineWidth: 1,//网格线宽度
                minorTickInterval: 'auto', //小刻度的间隔
                minorTickLength: 5, //小刻度的长度
                minorTickWidth: 1, //小刻度的宽度
                minorTickColor: '', //小刻度的颜色
                endOnTick: true, //是否以刻度结束
                title: {//指定X轴的标题
                    text: '',
                    style: {
                        fontWeight: "bold",
                        fontSize: '10pt'
                    }
                }
            },
            yAxis: {
                lineColor: '#000',
                lineWidth: 1,
                tickColor: '#000',
                tickLength: 5,
                tickWidth: 1,
                min: 0,//设置最小刻度的值
                maxPadding: 0.01,
                minPadding: 0.1,
                gridLineWidth: 1,
                reversed: true,//是否翻转显示,从大到小
                minorTickInterval: 'auto',
                title: {//指定y轴的标题
                    text: '井深',
                    style: {
                        fontWeight: "bold",
                        fontSize: '10pt'
                    }
                }
            },
            series: [{//折线属性
                name: '', //折线名称
                color: '',//折线颜色
                data: []//折线的点数据
            }]
        }

3.下面就该作图了。

由于每条折线都是单独独立的作图,所以需要对每条折线设置一个单独的颜色,否者全部都是一个颜色就没有对比的效果了。

   //色彩集
   var setColors = ['#2f7ed8', '#0d233a', '#8bbc21', '#910000', '#1aadce', '#492970', '#f28f43', '#77a1e5', '#c42525', '#a6c96a'];
   //var setColors = ['#058DC7', '#50B432', '#ED561B', '#DDDF00', '#24CBE5', '#64E572', '#FF9655', '#FFF263', '#6AF9C4'];
   //var setColors = ['#7cb5ec', '#434348', '#90ed7d', '#f7a35c', '#8085e9', '#f15c80', '#e4d354', '#8085e8', '#8d4653', '#91e8e1'];

我采用的是多个折线图独立画图的方法,需要为每个图分配一个画图的DIV空间。这里也可以在作图函数里动态生成<div>。

    <div style="width: auto; height: 750px; margin: 10px; border: 2px #416AA3 solid;
        margin: 10px;">
        <div style="width: 190px; height: 700px; float: left;" id="FluidProporty0">
        </div>
       ……
        <div style="width: 115px; height: 700px; float: left;" id="FluidProporty8">
        </div>
    </div>

为了达到效果,我需要所有折线左右无缝连接,且只在最左边的折线图中显示Y轴,将折线图的marginLeft属性需要设置为0,便可以将Y轴隐藏,并且和前一个折线图无缝连接。在这里我使用了循环生成折线图的方法。如下

//展示折线,需要参考HighChart的API
        function ShowLines(arrayALL) {
            for (var i = 0; i < arrayTitle.length; i++) {
                var tempOptions = options;
                if (i == 0) {//左侧第一个折线图
                    delete tempOptions.chart.marginLeft;//该语句删除属性
                }
                else {
                    tempOptions.chart.marginLeft = 0;
                    tempOptions.yAxis.title.text = '';
                }
                tempOptions.chart.renderTo = 'FluidProporty' + i;
                tempOptions.title.text = arrayTitle[i];
                tempOptions.series[0] = {
                    name: arrayTitle[i],
                    color: setColors[i],
                    data: arrayALL[i]
                };
                tempOptions.xAxis.lineColor = setColors[i];
                tempOptions.xAxis.tickColor = setColors[i];
                tempOptions.xAxis.minorTickColor = setColors[i];
                //根据折线属性绘制折线
                var chart = new Highcharts.Chart(tempOptions);
            }
        }

最后可以得到如下的结果图,基本满足要求。

参考:

HighCharts在线演示

http://www.hcharts.cn/demo/index.php

HighCharts半中文API文档

http://www.hcharts.cn/api/index.php

HighCharts实现多数据折线图分列显示,布布扣,bubuko.com

时间: 2024-10-05 04:59:52

HighCharts实现多数据折线图分列显示的相关文章

HighCharts绘制JS折线图(后台传数据给前台基于JFinal框架)

/*****************************Controller(基于JFinal框架)**************/ package com.zzu.controller;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.List;import org.jfree.chart.ChartFactory;import org.jfree.chart.ChartUtilitie

Highcharts 设置折线图的显示与隐藏

1.初始化隐藏某条曲线 series 配置如: [ {name:"发帖", postCountData}, {name:"删帖帖", deleteCountData, visible:false},//该条曲线将不显示 {name:"活跃数",activeCountData} ]; 2.手动触发 chart.series[index].show();//显示 chart.series[index].hide();//隐藏

Android 用achartengine 画折线图怎么显示不正确

============问题描述============ X.Y的刻度值都是我自己定义的 显示的点的位置不正确 请问是什么原因 怎么处理  还有我设置了显示网格 为什么不显示了 Y轴不设置自己的定义的刻度值 但是刻度个数又不对 这种情况显示是正确的就是刻度个数不够 ============解决方案1============ 属性设置不对,找个demo仔细看看设置,看自己哪里设置不对. ============解决方案2============ 我以前整理的一个曲线图,我共享下,你下载看看,里面东

highcharts api 中文网 折线图、曲线图、区域图、3D图、柱状图示例以及使用

highcharts api  中文网 地址:http://www.hcharts.cn/demo/index.php?p=10&theme=skies 代码示例 $(function () { $('#container').highcharts({ title: { text: 'Monthly Average Temperature', x: -20 //center }, subtitle: { text: 'Source: WorldClimate.com', x: -20 }, xA

jQuery Highcharts折线图案例分析

Highcharts是一款功能非常强大的jQuery图表应用,利用Highcharts可以创建很多外观漂亮而且数据展示灵活的网页图表.本文主要介绍了利用Highcharts实现的折线图,并将部分代码分享给大家. 效果图如下所示: js脚本引用: [html] view plaincopy <script src="Js/Index/jquery-1.5.2.min.js" type="text/javascript"></script> &l

excel中散点图和折线图的区别(散点图时间均匀分布)

折线图可以显示随单位(如:单位时间)而变化的连续数据,因此非常适用于显示在相等时间间隔下数据的趋势.散点图显示若干数据系列中各数值之间的关系,或者将两组数绘制为 xy 坐标的一个系列.------------------------------------在折线图中,类别数据沿水平轴均匀分布,所有值数据沿垂直轴均匀分布. 散点图有两个数值轴,沿水平轴(x 轴)方向显示一组数值数据,沿垂直轴(y 轴)方向显示另一组数值数据.散点图将这些数值合并到单一数据点并以不均匀间隔或簇显示它们.散点图通常用于

Android开发学习之路-自定义控件(天气趋势折线图)

之前写了个天气APP,带4天预报和5天历史信息.所以想着要不要加一个折线图来显示一下天气变化趋势,难得有空,就写了一下,这里做些记录,脑袋不好使容易忘事. 先放一下效果: 控件内容比较简单,就是一个普通的折线图,上下分别带有数字,点击的时候显示当天温度的差值. 创建一个类继承自View,并添加两个构造方法: public class TrendGraph extends View { public TrendGraph(Context context) { // 在java代码中创建调用 sup

EXCEL完成一个柱形图与折线图组合图表

EXCEL2016与EXCEL2013版本中新增的推荐的图表功能,可以帮助我们快速选择合适的图表.而我们今天要讲的就是其中一个典型的实例组合图表.我们先看一下我们要用的数据与完成的效果. 第一步:我们把光标定在EXCEL数据中,然后通过插入选项卡里面的推荐的图表命令,会弹出如下图对话框,然后我们选择所有图表中的-组合,EXCEL会自动将里面的数据进行图表类型选择 在这里最关键的是增长率,默认选择的是折线图,我们可以为其改为带标记的堆积折线图.特别提示:一定要勾选次坐标轴,肯定有同学会问为什么呢,

highcharts实例教程一:结合php与mysql生成折线图

Highcharts是一款纯javascript和html5编写的图表库,不仅几乎能兼容所有pc浏览器,而且对ios和android手机端的兼容 性也不错,它能够很简单便捷的在Web网站或Web应用中添加交互性的图表,Highcharts目前支持直线图.折线图.面积图.柱状图.饼图.散点图 等多达28种不同类型的图表,还支持3D立体图表的生成,可以满足你对Web图表的任何需求 !而且Highcharts对学习者.非商业机构是免费使用的. 案例场景:要求针对技术cto网站,直观地显示一周网站pv.