java代码实现highchart与数据库数据结合完整案例分析(二)---折线图

作者原创:未经博主允许不许转载

在上一篇的博客中,展示和分析了如何做一个饼状图,有疑问可以参考上一篇博客。

现在分析和展示折线图的绘制和案例分析,

先展示效果图:

与饼状图不同的是,折线图展现更多的数据,也会体现出更多的自动性。

先展示一下js代码:

<!-- 播放类型统计折线图 -->
<script type="text/javascript">
$(function () {
    var livFlowList=document.getElementById("livFlowList").value;
    var vodFlowList=$("#vodFlowList").val(); //此处接收到的为一个string类型的变量
    var yVodFlow =[];   //此处的数组为折线图里面需要的数据数组
    var yLiveFlow = [];
    var xMonth=[]; //自动生成的x轴坐标轴的数据元素
    //去除两边的[],,,循环遍历list集合中的元素,并将其解析为js数据类型,,,由于是将list集合接收来的数据,两边带有【】号,需要将其删除
    var test1 = livFlowList.substring(1,livFlowList.length-1);  //在使用substring方法时,必须有一个变量去接,否则不会返回响应的值
    var ss=test1.split(‘,‘);
    for(var i=0; i<ss.length; i++){
        yLiveFlow.push(parseFloat(ss[i]));//将字符串数组中的元素解析为js数字格式类型,并放入到数组中
    }

    var test2=vodFlowList.substring(1,vodFlowList.length-1);
    var tt=test2.split(‘,‘);
    for(var h=0;h<tt.length; h++){
        yVodFlow.push(parseFloat(tt[h]));
    }
    var flowMonthList=$("#flowMonthList").val();
    var monthList=flowMonthList.substring(1,flowMonthList.length-1);
    var gg=monthList.split(‘,‘);
    for(var k=0; k<gg.length; k++){
        xMonth.push(parseInt(gg[k]));
    }

     $(‘#line_playType‘).highcharts({
         title: {
            text: ‘流量统计‘,
            x: -20
        },
        credits: {
            text: ‘‘,
            href: ‘‘
        },
        xAxis: {
            categories:xMonth
        },
        yAxis: {
            title: {
                text: ‘流量(G)‘
            },
            plotLines: [{
                value: 0,
                width: 1,
                color: ‘#808080‘
            }]
        },
        tooltip: {
            valueSuffix: ‘G‘
        },
        legend: {
            layout: ‘vertical‘,
            align: ‘right‘,
            verticalAlign: ‘middle‘,
            borderWidth: 0
        },
        series: [{
            name: ‘直播流量‘,
            data: yLiveFlow,            color:Highcharts.getOptions().colors[3]
        },
        {
            name: ‘点播流量‘,
            data:yVodFlow,            color:Highcharts.getOptions().colors[7]
        }
       ]
     });
});
</script>

此处需要注意的事项,都写在代码的注释里面,当将js数组类型的变量放入到data中时,折线图会自动解析数组中的元素个数,

并自动解析和展示。

js中接收到的数据,都是从java后台得到的数据,并将数据放入到jsp页面中,然后再js从jsp中获取值。

代码如下:

<input type="hidden" name="vodFlowList" id="vodFlowList" value="${vodFlowList }"/>
                       <input type="hidden" name="livFlowList" id="livFlowList" value="${livFlowList }"/>
                       <input type="hidden" name="flowMonthList" id="flowMonthList" value="${flowMonthList }"/>
                        

之所以放入到jsp页面中,是为了实现在js中方便快捷的获取到数据。

现在展示出java后台获取数据部分的代码

//直播点播流量增长折线图数据统计
        UserResourceMonthStatistics monthStatistics= new UserResourceMonthStatistics();
        monthStatistics.setUserId(userId);//从数据库查询展示数据的集合
        List<UserResourceMonthStatistics> monthList=monthStatisticService.getResMonthStatisticsList(monthStatistics);//由于要展示3组数据,所以new了三个集合,并将需要的数据分别放入到对应的集合中,然后再setAttribute到jsp
        List<Double> livFlowList = new ArrayList<>();
        List<Double> vodFlowList = new ArrayList<>();
        List<String> flowMonthList = new ArrayList<>();
        for (UserResourceMonthStatistics userStatistics : monthList)
        {
            long liveFlow2 = percentString(userStatistics.getLiveFlow()); //点播流量
            double liveMonthFlow = chargeFlow(liveFlow2);
            long vodFlow2 = percentString(userStatistics.getVodFlow());
            double vodMonthFlow = chargeFlow(vodFlow2);
            String month= userStatistics.getMonth();
            flowMonthList.add(month);
            livFlowList.add(liveMonthFlow);
            vodFlowList.add(vodMonthFlow);
        }
        request.setAttribute("flowMonthList", flowMonthList);
        request.setAttribute("livFlowList", livFlowList);
        request.setAttribute("vodFlowList", vodFlowList);

在刚开始做的时候,一直在想如何直接从list集合中获取某一属性的集合值,在网上搜了很久,也没有搜到对应的方法,

于是写了循环,从而完成一个折线图的绘制。

绘制折线图,也可以用ajax的方式实现,其中主要的逻辑和数据处理都是放在客户端处理,思路和在服务端处理的思路是

一致的,用ajax请求到数据,一般该数据为一个集合,然后再js中循环该集合,并将需要的数据放入到数组中,然后将数组

提供给折线图插件。。。

时间: 2024-10-08 19:35:18

java代码实现highchart与数据库数据结合完整案例分析(二)---折线图的相关文章

java代码实现highchart与数据库数据结合完整案例分析(一)---饼状图

作者原创:转载请注明出处 在做项目的过程中,经常会用到统计数据,同时会用到highchart或echart进行数据展示,highchart是外国开发的数据统计图插件, echart是我们国家开发的数据统计插件,我比较喜欢highchart的统计插件,在这里展示的也是highchart插件的应用. 应用highchart插件并不难,找到官方文档,copy代码,就能把图标呈现出来,难的是如何将本地数据库中的数据与其结合.因此, 在这里主要分析将数据库数据和插件结合的过程,我用的是java代码实现的.

Java代码实现向Oracle数据库中导入已备份的数据库文件

今天将很早就实现的一个Oracle数据库备份功能粘贴出来,这个功能是在大学做阶段设计时写的: import java.io.IOException; /** * Java代码实现向Oracle数据库中导入已备份的数据库文件 * * @author:Gaohuanjie */ public class OracleImportDatabase { /** * 向Oracle数据库中导入已备份的数据库文件 * * @author:Gaohuanjie * @param userName 进入数据库所

jsp页面:js方法里嵌套java代码(是操作数据库的),如果这个js 方法没被调用,当jsp页面被解析的时候,不管这个js方法有没有被调用这段java代码都会被执行?

jsp页面:js方法里嵌套java代码(是操作数据库的),如果这个js 方法没被调用,当jsp页面被解析的时候,不管这个js方法有没有被调用这段java代码都会被执行? 因为在解析时最新解析的就是JAVA代码,不管写哪里,都会最新被解析

java代码定时备份mysql数据库及注意事项——基于 springboot

一.需求: 定时备份数据库数据 二.分析: 1. 定时任务 2. 备份数据库表结构和数据 三.实现: 1. pom 文件: <?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" x

可视化数据matplotlib之安装与简单折线图

matplotlib是一个可视化数据的模块,安装前需要先安装Visual Studio Community:然后去https://pypi.python.org/pypi上查找matplotlib并下载:最后安装:python -m pip install matplotlib-2.0.2-cp36-cp36m-win_amd64.whl: (安装过程中需要联网下载相关模块) 本例使用matplotlib模块画简单的折线图: 1 from matplotlib import pyplot 2 f

Excel数据可视化应用(直方图、折线图、饼状图)

直方图:对比关系 直方图是一种统计报告图,是表示资料变化情况的主要工具.直方图由一系列高度不等的的纵向条纹或线段表示数据分布的情况.一般用横轴表示数据类型,纵轴表示分布情况. 例1: 1.右键单击图表的纵坐标轴数据,选择“设置坐标轴格式”命令打开窗格,在“坐标轴选项”下,各类数据设置如下: 2.右键单击图例,选择设置图例格式,选择靠上(或点击图表空白处,点击上方图表工具中的设计,选择下方左侧的“添加图表元素”,选择“图例”.“顶部”) 3.右键单击任一直条(单击一下会自动选择全部直条),选择“添

通过纯Java代码从excle中读取数据(为.xlsx文件)

参考链接: 程序代码: package demo; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipException; import java.util.zip.ZipFile; import javax.xml.parsers.DocumentBuilderFactory; im

java代码连接本地redis数据库

关于redis的介绍在这里就不说了.今天主要讲解,如何连接redis.连接之前.必须要做的几点: 一.安装redis.下载服务和客户端,然后 二.启动redis服务. 经过这两步的测通以后.我们只需要,看代码走起; package com.huojg.test; import redis.clients.jedis.Jedis; public class mainConnetcionRedis { public static void main(String[] args) { //实例化一个客

关于不同软件间数据库数据同步的实现分析

目标:K3数据库中销售订单自动录入生产管理系统 方式:数据库触发器 过程: 1.导出分析K3数据库表结构,生产管理系统数据库表结构 2.制作K3前台项目--K3数据库中对应的列--生产管理系统数据库中对应的列--生产管理系统前台项目 3.了解K3的销售数据录入数据库的过程:订单表.订单详细表中数据插入时先后顺序 4.了解K3数据库可以直接向生产管理系统数据库传递哪些数据,间接传递那些数据(需从其他表取数据,需对数据进行分割.合并等) 5.触发器测试(从简单到复杂:旱冰鞋--滑板--自行车--电动