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是在server获取的,适用于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);
}
}

最后能够得到例如以下的结果图。基本满足要求。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTWV0YWwx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

參考:

HighCharts在线演示

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

HighCharts半中文API文档

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

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

  1. HighCharts之2D折线图

    HighCharts之2D折线图 1.HighCharts之2D折线图源码 line.html: <!DOCTYPE html> <html> <head> < ...

  2. 使用highcharts动态绘制折线图——so easy

    之前学习highcharts发现网上的教程大部分是对highcharts数据的注释,如何动态绘制数据大部分一笔带过,让那些初涉开发的小白云里雾里,所以我就写了一篇这样的博客. <html> ...

  3. react-echarts之折线图的显示

    react中想要实现折线图和饼图的功能,需要引入react-echarts包,然后再实现折线图的功能.我这里引用的版本是:0.1.1.其他的写法参echarts官网即可.下面详细讲解的是我在react ...

  4. ECharts动态获取后台传过来的json数据进行多个折线图的显示,折线的数据由后台传过来

    ECharts 多个折线图动态获取json数据 效果图如下: 一.html部分 <p id="TwoLineChart" style="width:100%; he ...

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

    1.初始化隐藏某条曲线 series 配置如: [ {name:"发帖", postCountData}, {name:"删帖帖", deleteCountDa ...

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

    之前写了个天气APP,带4天预报和5天历史信息.所以想着要不要加一个折线图来显示一下天气变化趋势,难得有空,就写了一下,这里做些记录,脑袋不好使容易忘事. 先放一下效果: 控件内容比较简单,就是一个普 ...

  7. OpenGL——折线图柱状图饼图绘制

    折线图绘制代码: #include<iostream> //旧版本 固定管线 #include<Windows.h> #include <GL/glut.h> // ...

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

    折线图可以显示随单位(如:单位时间)而变化的连续数据,因此非常适用于显示在相等时间间隔下数据的趋势.散点图显示若干数据系列中各数值之间的关系,或者将两组数绘制为 xy 坐标的一个系列.-------- ...

  9. matplotlib常见绘图基础代码小结:折线图、散点图、条形图、直方图、饼图

    一.折线图 二.散点图 三.条形图 四.直方图 五.饼图 一.折线图折线图用于显示随时间或有序类别的变化趋势 from matplotlib import pyplot as plt x = rang ...

随机推荐

  1. jQuery 用each后添加click

    mydd = $('.plist'); mydd.each(function(i){ $(this).click(function(){ mydl.eq(i).hide("slow" ...

  2. ZH奶酪:PHP 使用DOMDocument抓取网页

    原文链接:http://blog.csdn.net/xyzhaopeng/article/details/6626340 从一个HTML页面的一个表格中提取数据并且将这个数据整理出来加入到MySQL数 ...

  3. JAVA设计模式——第 7 章 门面模式【Facade Pattern】(转)

    好,我们继续讲课.大家都是高智商的人,都写过纸质的信件吧,比如给女朋友写情书什么的,写信的过程大家都还记得吧,先写信的内容,然后写信封,然后把信放到信封中,封好,投递到信箱中进行邮递,这个过程还是比较 ...

  4. markdown table语法

    普通的表格 | 一个普通标题 | 一个普通标题 | 一个普通标题 | | ------ | ------ | ------ | | 短文本 | 中等文本 | 稍微长一点的文本 | | 稍微长一点的文本 ...

  5. WIN下Git GUI 教程

    现在很多都有git来托管项目或者来查找资料,但是看起来操作不是很方便,现在由于win下可以直接使用git gui,让使用git变得方便,当然这只是针对日常简单的使用,如果想详细的使用,可以去参考廖学峰 ...

  6. Webwork【03】核心类 ServletDispatcher 的初始化

    1. Webwork 与 Xwork 搭建环境需要的的jar 为:webwork-core-1.0.jar,xwork-1.0.jar,搭建webwork 需要xwork 的jar呢?原因是这样的,W ...

  7. 排序基础之归并排序、快排、堆排序、希尔排序思路讲解与Java代码实现

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6594855.html  一:归并排序==通过中间值进行左右划分递归,然后调用合并函数对左右递归的结果进行合并( ...

  8. HotSpot学习(一)——如何下载openjdk源码

    下载页地址: https://download.java.net/openjdk/jdk7 或者 https://download.java.net/openjdk/jdk8 这里以jdk8的页面为例 ...

  9. maven正确的集成命令-U-B

    http://healthandbeauty.iteye.com/blog/1618501 在持续集成服务器上使用怎样的 mvn 命令集成项目,这个问题乍一看答案很显然,不就是 mvn clean i ...

  10. Inno Setup入门(七)——提供安装语言选项

    Inno Setup安装目录下有一个Languages的文件夹,该文件夹提供了可供使用的语言,通过在脚本中加入[languages]段,可以实现该项功能,实现代码如下: [setup] ;全局设置,本 ...