热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用echart画折线图的经验_1

几点经验:1.绘制函数一定要扩展性强,以适应多指标多图表绘制。2.可以按照中间95%范围的数据样本的值来设置Y轴刻度的最大最小值。最大最小值之外的值点还是会体现在数据中,其标识点则会画在
几点经验:
1. 绘制函数一定要扩展性强,以适应多指标多图表绘制。
2. 可以按照中间95%范围的数据样本的值来设置Y轴刻度的最大最小值。最大最小值之外的值点还是会体现在数据中,其标识点则会画在最上或最下的分割线上。
3. axisLabel: {rotate: 45, interval:desc.xVals_intv}可以控制X轴坐标的角度和显示间隔。
4. 折线图不能像scatter一样,以[x,y]方式设置系列的值列表。所以,如果有某值系在某X位置没有值,则其中值可以设置为'-'。此时,折线绘制到此[x,-]位置时,会断掉,形成很多的断裂的线段。
4. echart在CPU很忙的时候,同时进行绘图,很容易导致渲染失败。可以把大规模的数据计算放在绘图前完成。避免绘图与数据处理并行。
//绘图
<script src="<%=path%>/resources/customJS/echarts-all.js">script>
<script type="text/Javascript"> var lineChart=function (desc,filterval) { var myChart = echarts.init(document.getElementById(lineDivGet(desc.key))); var cOngesalg= "" if (typeof(filterval.congesalg) != "undefined"){ cOngesalg= filterval.congesalg; } var myoption = { title : { text: desc.seqNum + ". " + lineTitleGet(desc.key)+" ("+filterval.eNetType+" "+ congesalg + ")", subtext:"计算公式: " + lineSubtitleGet(desc.key), subtextStyle: { fontSize: 14, color: 'blue' //设置副标题颜色和大小 }, x:'center' }, tooltip : { show: true, trigger: 'axis', formatter: function(data){ //鼠标移到某有值点的X轴位置时,提示的信息。 var info = desc.xlabels[data[0].dataIndex]; for (var i = 0; i //data[i]是值点系列 if ("-" != data[i].value){//如果某系列在此X轴位置没有值,则其值为'-' var tmp = data[i].seriesName.split(" "); info += "
"
+ tmp[0]+":" + data[i].value + desc.unit; } } return info; } }, legend: { orient: 'vertical', x:'left', data:desc.sName//赋值值点系列名 }, toolbox: { show: true, orient : 'vertical', x: 'right', y: 'center', feature : { mark : {show: true}, dataView : {show: true, readOnly: false}, restore : {show: true}, saveAsImage : {show: true} } }, xAxis : [ { axisLabel: {rotate: 45, interval:desc.xVals_intv},//设置X坐标标识斜转45度;并设置刻度生成的间隔,以避免刻度太多显示难看 type : 'category', splitLine: {show: false},//不显示X轴垂直的分割线 boundaryGap : false, data : desc.xVals }, ], yAxis : [ { type: 'value', min: desc.ymin, max: desc.ymax, splitNumber:desc.gripNum,//设置Y轴值最大最小值,以及分为几个刻度。 axisLabel : { formatter: '{value} '+ desc.unit//设置Y轴刻度标识格式 } } ], series : [ { name: desc.sName[0], type: 'line', data: desc.yVals[0], itemStyle:{ emphasis:{label:{show:true}} }, markPoint : {//标识出最大最小值 data : [ {type : 'max', name: '最大值'}, {type : 'min', name: '最小值'} ] }, markLine : { data : [//画平均值线 {type : 'average', name: '平均值'} ] } }, { name: desc.sName[1], type: 'line', data: desc.yVals[1], itemStyle:{ emphasis:{label:{show:true}} }, markPoint : { data : [ {type : 'max', name: '最大值'}, {type : 'min', name: '最小值'} ] }, markLine : { data : [ {type : 'average', name: '平均值'} ] } } ], }; myChart.setOption(myoption); }

“`
//计算值点描述信息
var getLineDesc = function(key, items, filterval){
var xlabels = []
var xVals = []
var yVals = []
var yVals_S1 = []
var avg_S1 = 0
var num_S1 = 0
var avg_S2 = 0
var num_S2 = 0
var yVals_S2 = []
var xVals_num = 10

    if (items.length > 0){
        var xVals_intv = Math.ceil(items.length/xVals_num)
        var tag=""
        if (datafilter_nettype_slow == filterval.eNetType){
              tag="2"
        }
        //区分值系列
        for (var i = 0; i " +
                "Addr:"+items[i].addr +"/"+ items[i].port + "
" + "周期:"+items[i].period +"  " +" " + items[i].congesalg xlabels.push(labelx) xVals.push(items[i].tvSec.replace(" ","\n")) var yx = Math.floor((items[i][key+tag] * lineAjustGet(key))*100)/100; yVals.push(yx); if (0 != items[i].optimizing){ avg_S1 += yx; num_S1 ++; yVals_S1.push(yx); yVals_S2.push("-"); }else{ avg_S2 += yx; num_S2 ++; yVals_S1.push("-"); yVals_S2.push(yx); } } } var optPercent = "" var unit = lineUnitGet(key); if (num_S1 > 0){ avg_S1 = Math.floor((avg_S1/num_S1) *100)/100; }else{ avg_S1 = "-" } if (num_S2 > 0){ avg_S2 = Math.floor((avg_S2/num_S2) *100)/100; if (num_S1 > 0){ if ('%' == unit){ optPercent = "(" + Math.ceil((avg_S1 - avg_S2) *100)/100 + "%)"; }else{ optPercent = (((avg_S2 - avg_S1)*100)/avg_S2) optPercent = "(" + Math.ceil(optPercent *100)/100 + "%)"; } } }else{ avg_S2 = "-" } //计算Y周最大最小刻度,和设置的分割数 var defaultYGripNum = 4 var pickThreshold = 0.025 //use 95% data 2 caculate Y Scale Value var ySort = sortArray(yVals); var ymax = 0; var ymin = 0; if (0 != yVals.length) { var tag = Math.ceil(ySort.length * pickThreshold) ymin = ySort[tag]; tag = Math.ceil(ySort.length * ( 1 - pickThreshold)); if (tag >= ySort.length){ tag = ySort.length - 1; } ymax = ySort[tag]; var yIntvl = Math.ceil((ymax - ymin + 1)/(defaultYGripNum - 1)) ymin = ymin - Math.ceil(yIntvl/2) if (ymin <0){ ymin = 0; }else{ ymin = Math.floor(ymin) } ymax = ymax + Math.ceil(yIntvl/2); ymax = ymin + Math.ceil((ymax - ymin)/defaultYGripNum)*defaultYGripNum; } //赋值出去 var desc = {}; desc.key = key; desc.xVals = xVals; desc.xlabels = xlabels; desc.xVals_intv = xVals_intv; desc.yVals = [yVals_S1, yVals_S2]; desc.ymax = ymax; desc.ymin = ymin; desc.unit = unit; desc.gripNum = defaultYGripNum; desc.sName = [datafilter_optimize_yes +" "+avg_S1+unit + optPercent, datafilter_optimize_no+" "+avg_S2+unit]; return desc; }

var allLineChartDo = function(filterval, items){//上层控制函数
if (0 == items.length){
return;
}

    var tag=""
    if (datafilter_nettype_slow == filterval.eNetType){
        tag="2"
    }
    var lineDesc = [];
    var lineNum = 0;
    for (var i = 0; i 

“`


推荐阅读
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • vue使用
    关键词: ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • FeatureRequestIsyourfeaturerequestrelatedtoaproblem?Please ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • 本文介绍了如何使用PHP向系统日历中添加事件的方法,通过使用PHP技术可以实现自动添加事件的功能,从而实现全局通知系统和迅速记录工具的自动化。同时还提到了系统exchange自带的日历具有同步感的特点,以及使用web技术实现自动添加事件的优势。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 本文讨论了在iOS平台中的Metal框架中,对于if语句中的判断条件的限制和处理方式。作者提到了在Metal shader中,判断条件不能写得太长太复杂,否则可能导致程序停留或没有响应。作者还分享了自己的经验,建议在CPU端进行处理,以避免出现问题。 ... [详细]
  • RouterOS 5.16软路由安装图解教程
    本文介绍了如何安装RouterOS 5.16软路由系统,包括系统要求、安装步骤和登录方式。同时提供了详细的图解教程,方便读者进行操作。 ... [详细]
author-avatar
hellopc
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有