可視化基礎之圖表聯動


今天老師布置任務為:實現數據的可視化,並實現圖表聯動。

其具體內容為將后台數據以三種圖形形式(折現圖,柱狀圖,餅狀圖)展示與表格展示在界面上,並在鼠標移動到表格上時讓圖表符合條件的一列高亮,或者點擊各種圖的數據時將圖表中符合條件的一行進行高亮顯示。

基本截圖如下:

 

 

 

 這個頁面的全部代碼:

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
    <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
   <link href="${pageContext.request.contextPath}/css/bootstrap.min.css" rel="stylesheet">

    <script src="${pageContext.request.contextPath}/js/jquery-3.3.1.min.js"></script>
    
    <script src="https://cdn.staticfile.org/echarts/4.3.0/echarts.min.js"></script>
    
    <script src="../js/bootstrap.min.js"></script>
</head>
<body>
<ul class="nav nav-tabs">
  <li role="presentation" ><a href="${pageContext.request.contextPath}/templete/tongji.jsp">綜合檢索</a></li>
  <li role="presentation" ><a href="fljs.jsp">分類檢索</a></li>
  <li role="presentation" class="active"><a href="${pageContext.request.contextPath}/templete/tubiao.jsp">圖表顯示</a></li>
</ul>
  <label>————————請選擇檢索條件——————————</label>
   <%--分類檢索--%>
                    <div class="tab-pane active" id="panel-169507">
                        <form  action="${pageContext.request.contextPath}/tubiao_Servlet" method="post" >
                            <div class="row-fluid">
                                <div class="span12">
                                    <h4 align="left" >分類檢索條件
                                        <select id="jstj" class="form-control" style="height: 40px;display: inline;width:200px;" name="jstj">
                                            <option value ="0">--請選擇--</option>
                                            <option value="jgmc">機構全稱</option>
                                            <option value="gkglbm">歸口管理單位</option>
                                            <option value="szdy">所在地域</option>
                                            <option value="frdb">法人代表</option>
                                            <option value="lxr">聯系人</option>
                                            <option value="jgsx">機構屬性</option>
                                            <option value="jsxqmc">技術需求名稱</option>
                                            <option value="gjz">關鍵字</option>
                                            <option value="ntrzjze">擬投入資金總額</option>
                                            <option value="jsxqjjfs">技術需求解決方式</option>
                                            <option value="kjhdlx">科技活動類型</option>
                                            <option value="xkfl">學科分類</option>
                                            <option value="xqjsssly">需求技術所屬領域</option>
                                            <option value="xqjsyyhy">需求技術應用行業</option>
                                        </select>
                                        <input type="text" class="form-control" name="value" id="value" style="width:250px;height: 40px;display: inline" value="${value}">
                                    </h4>
                                    <h4>
                                        檢索要求
                                        <select id="jsyq" class="form-control" style="width: 200px;height: 40px;display: inline" name="jsyq" >
                                            <option value = "0">模糊查詢</option>
                                            <option value = "1">精確查詢</option>
                                        </select>
               選擇統計字段                                                                         <select id="tjzd" class="form-control" style="width: 200px;height: 40px;display: inline" name="tjzd" >
                                            <option value = "jgsx">機構屬性</option>
                                            <option value = "kjhdlx">科技活動類型</option>
                                            <option value = "jsxqjjfs">技術需求解決方式</option>
                                        </select>
                   選擇圖表類型                                  <select id="tblx" class="form-control" style="width: 200px;height: 40px;display: inline" name="tblx">
                                            <option value = "zzt">柱狀圖</option>
                                            <option value = "zxt">折線圖</option>
                                            <option value = "bzt">餅狀圖</option>
                                        </select>
                                        <input type="submit" class="btn btn-success" style="width: 200px;height:30px;position: relative;left: 100px" value="查詢">
                                    </h4>
                                </div>

                            </div>
                        </form>
                        
                        
                       <div id="main" style="width: 700px;height:400px;" >
                        <script type="text/javascript">
                        $(function() {
                             if('${tblx}'=="zzt"){
                                 var myChart = echarts.init(document.getElementById('main'));
                                 var arr = new Array();
                                 var index = 0;
                                 <c:forEach items="${listtb}" var="item"> 
                                     arr[index++] = ${item.count};
                                 </c:forEach>
                                 // 指定圖表的配置項和數據
                                 var option = {
                                     title: {
                                         text: '統計圖表'
                                     },
                                     tooltip: {
                                         show: true
                                     },
                                     legend: {
                                         data:['統計數']
                                     },
                                     xAxis : [
                                         {
                                             type : 'category',
                                             axisLabel:{  
                                                  interval:0,//橫軸信息全部顯示  
                                                  rotate:40,//-30度角傾斜顯示  
                                                   },
                                             data : [
                                                 <c:forEach items="${listtb}" var="item">
                                                 ["${item.type}"],
                                                 </c:forEach>
                                             ]
                                         }
                                     ],
                                     yAxis : [
                                         {
                                             type : 'value'
                                         }
                                     ],
                                     series : [
                                         {
                                             name:'統計數',
                                             type:'bar',
                                             data: arr
                                             
                                         }
                                     ]
                                 };

                                 // 使用剛指定的配置項和數據顯示圖表。
                                 myChart.setOption(option);
                              }else if('${tblx}'=="zxt"){
                                  var myChart = echarts.init(document.getElementById('main'));
                                  var arr = new Array();
                                  var index = 0;
                                  <c:forEach items="${listtb}" var="item"> 
                                      arr[index++] = ${item.count};
                                  </c:forEach>

                                  // 指定圖表的配置項和數據
                                  var option = {
                                      title: {
                                          text: '統計圖表'
                                      },
                                      tooltip: {
                                          show: true
                                      },
                                      legend: {
                                          data:['統計數']
                                      },
                                      xAxis : [
                                          {
                                              type : 'category',
                                              axisLabel:{  
                                                   interval:0,//橫軸信息全部顯示  
                                                   rotate:40,//-30度角傾斜顯示  
                                                    },
                                              data : [
                                                  <c:forEach items="${listtb}" var="item">
                                                  ["${item.type}"],
                                                  </c:forEach>
                                              ]
                                          }
                                      ],
                                      yAxis : [
                                          {
                                              type : 'value'
                                          }
                                      ],
                                      series : [
                                          {
                                              name:'統計數',
                                              type:'line',
                                              data: arr
                                              
                                          }
                                      ]
                                  };

                                  // 使用剛指定的配置項和數據顯示圖表。
                                  myChart.setOption(option);
                                 }else{
                                   var myChart = echarts.init(document.getElementById('main'));
                                   var arr = new Array();
                                   var index = 0;
                                   <c:forEach items="${listtb}" var="item"> 
                                   arr[index++] = ${item.count};
                                   </c:forEach>
                                   var option = {
                                           tooltip: {
                                               trigger: 'item',
                                               formatter: '{a} <br/>{b}: {c} ({d}%)'
                                           },
                                           legend: {
                                               orient: 'vertical',
                                               left: 10,
                                             data : [
                                                 <c:forEach items="${listtb}" var="item">
                                                 '${item.type}',
                                                 </c:forEach>
                                             ]
                                           },
                                           series: [
                                               {
                                                   name: '訪問來源',
                                                   type: 'pie',
                                                   radius: ['50%', '70%'],
                                                   avoidLabelOverlap: false,
                                                   label: {
                                                       show: false,
                                                       position: 'center'
                                                   },
                                                   emphasis: {
                                                       label: {
                                                           show: true,
                                                           fontSize: '30',
                                                           fontWeight: 'bold'
                                                       }
                                                   },
                                                   labelLine: {
                                                       show: false
                                                   },
                                                   data: [
                                                        <c:forEach items="${listtb}" var="item">
                                                       {value: '${item.count}', name: '${item.type}'},
                                                          </c:forEach>
                                                   ]
                                               }
                                           ]
                                       };
                                   myChart.setOption(option);
                                 }
                           myChart.on('click',function (params) {
                                // 獲取table下所有的tr
                                let trs = $("#table tbody tr");
                                for (var i = 0;i<trs.length;i++){
                                    // 獲取tr下所有的td
                                    let tds = trs.eq(i).find("td");
                                    // 先把之前的標記的success去掉
                                    $("#table tbody tr").eq(i).removeClass('success');
                                    var n = 0;
                                    if('${tjzd}'=="jgsx"){
                                        n=4;
                                    }else if('${tjzd}'=="kjhdlx"){
                                        n=5;
                                        
                                    }else{
                                        n=6;
                                    }
                                    // 如果點擊圖示的名字和table下的某一個行的第一個td的值一樣
                                    if (params.name == tds.eq(n).text()){
                                        //設置success狀態
                                        $("#table tbody tr").eq(i).addClass('success');
                                        // 跳轉到頁面指定的id位置
                                        $("html,body").animate({scrollTop:$("#table tbody tr").eq(i).offset().top},1000);
                                    }
                                }
                            });
                            // 當鼠標落在tr時,顯示浮動
                            $("#table tbody").find("tr").on("mouseenter",function () {
                                 var n = 0;
                              if('${tjzd}'=="jgsx"){
                                  n=4;
                              }else if('${tjzd}'=="kjhdlx"){
                                  n=5;
                                  
                              }else{
                                  n=6;
                              }
                                // 獲得當前匹配元素的個數
                                let row = $(this).prevAll().length;
                                // 獲得當前tr下td的名字
                                let name = $("#table tbody").find("tr").eq(row).find("td").eq(n).text();
                                // 設置浮動
                                myChart.dispatchAction({ type: 'showTip',seriesIndex: 0, name:name});//選中高亮
                            });
                            // 當鼠標移開tr時候取消浮動
                             $("#table tbody").find("tr").on("mouseleave",function () {
                                  var n = 0;
                              if('${tjzd}'=="jgsx"){
                                  n=4;
                              }else if('${tjzd}'=="kjhdlx"){
                                  n=5;
                                  
                              }else{
                                  n=6;
                              }
                                // 獲得當前匹配元素的個數
                                let row = $(this).prevAll().length;
                                // 獲得當前tr下td的名字
                                let name = $("#table tbody").find("tr").eq(row).find("td").eq(n).text();
                                // 設置浮動
                                myChart.dispatchAction({ type: 'hideTip', name:name});//選中高亮
                            });
                        });
                     </script>
                       </div> 
                        
                        
                        
                        
                        <div class="row-fluid">
                            <div class="span12">
                                <table class="table table-bordered table-hover" id="table">
                                    <thead>
                                    <tr>
                                        <th>需求名稱</th>
                                        <th>學科分類</th>
                                        <th>歸口管理單位</th>
                                        <th>機構全稱</th>
                                        <th>機構屬性</th>
                                        <th>活動類型屬性</th>
                                        <th>技術學求解決方式</th>
                                        <th>所在地域</th>
                                        <th>操作</th>
                                    </tr>
                                    </thead>
                                    <tbody>
                                    <c:forEach var="m" items="${list}">
                                        <tr>
                                            <td>${m.jsxqmc}</td>
                                            <td>${m.xkfl}</td>
                                            <td>${m.gkglbm}</td>
                                            <td>${m.jgmc}</td>
                                            <td>${m.jgsx}</td>
                                            <td>${m.kjhdlx}</td>
                                            <td>${m.jsxqjjfs}</td>
                                            <td>${m.szdy}</td>
                                            <td><a href="${pageContext.request.contextPath}/xssh1_Servlet?wjid=${m.wjid}&sy=fljs"><button class="btn btn-success">查看</button></a></td>
                                        </tr>
                                    </c:forEach>
                                    </tbody>
                                </table>
                            </div>
                        </div>
                       
                    </div>
                           <h1 class="invisible">11</h1>
       <h1 class="invisible">11</h1>
          <h1 class="invisible">11</h1>
       <h1 class="invisible">11</h1>
          <h1 class="invisible">11</h1>
       <h1 class="invisible">11</h1>
          <h1 class="invisible">11</h1>
       <h1 class="invisible">11</h1>
          <h1 class="invisible">11</h1>
       <h1 class="invisible">11</h1>
          <h1 class="invisible">11</h1>
       <h1 class="invisible">11</h1>
              <h1 class="invisible">11</h1>
       <h1 class="invisible">11</h1>
          <h1 class="invisible">11</h1>
       <h1 class="invisible">11</h1>
          <h1 class="invisible">11</h1>
       <h1 class="invisible">11</h1>
          <h1 class="invisible">11</h1>
       <h1 class="invisible">11</h1>
          <h1 class="invisible">11</h1>
       <h1 class="invisible">11</h1>
          <h1 class="invisible">11</h1>
       <h1 class="invisible">11</h1>           <h1 class="invisible">11</h1>
       <h1 class="invisible">11</h1>
          <h1 class="invisible">11</h1>
       <h1 class="invisible">11</h1>
          <h1 class="invisible">11</h1>
       <h1 class="invisible">11</h1>
          <h1 class="invisible">11</h1>
       <h1 class="invisible">11</h1>
          <h1 class="invisible">11</h1>
       <h1 class="invisible">11</h1>
          <h1 class="invisible">11</h1>
       <h1 class="invisible">11</h1>
              <h1 class="invisible">11</h1>
       <h1 class="invisible">11</h1>
          <h1 class="invisible">11</h1>
       <h1 class="invisible">11</h1>
          <h1 class="invisible">11</h1>
       <h1 class="invisible">11</h1>
          <h1 class="invisible">11</h1>
       <h1 class="invisible">11</h1>
          <h1 class="invisible">11</h1>
       <h1 class="invisible">11</h1>
          <h1 class="invisible">11</h1>
       <h1 class="invisible">11</h1>           <h1 class="invisible">11</h1>
       <h1 class="invisible">11</h1>
          <h1 class="invisible">11</h1>
       <h1 class="invisible">11</h1>
          <h1 class="invisible">11</h1>
       <h1 class="invisible">11</h1>
          <h1 class="invisible">11</h1>
       <h1 class="invisible">11</h1>
          <h1 class="invisible">11</h1>
       <h1 class="invisible">11</h1>
          <h1 class="invisible">11</h1>
       <h1 class="invisible">11</h1>
              <h1 class="invisible">11</h1>
       <h1 class="invisible">11</h1>
          <h1 class="invisible">11</h1>
       <h1 class="invisible">11</h1>
          <h1 class="invisible">11</h1>
       <h1 class="invisible">11</h1>
          <h1 class="invisible">11</h1>
       <h1 class="invisible">11</h1>
          <h1 class="invisible">11</h1>
       <h1 class="invisible">11</h1>
          <h1 class="invisible">11</h1>
       <h1 class="invisible">11</h1>           <h1 class="invisible">11</h1>
       <h1 class="invisible">11</h1>
          <h1 class="invisible">11</h1>
       <h1 class="invisible">11</h1>
          <h1 class="invisible">11</h1>
       <h1 class="invisible">11</h1>
          <h1 class="invisible">11</h1>
       <h1 class="invisible">11</h1>
          <h1 class="invisible">11</h1>
       <h1 class="invisible">11</h1>
          <h1 class="invisible">11</h1>
       <h1 class="invisible">11</h1>
              <h1 class="invisible">11</h1>
       <h1 class="invisible">11</h1>
          <h1 class="invisible">11</h1>
       <h1 class="invisible">11</h1>
          <h1 class="invisible">11</h1>
       <h1 class="invisible">11</h1>
          <h1 class="invisible">11</h1>
       <h1 class="invisible">11</h1>
          <h1 class="invisible">11</h1>
       <h1 class="invisible">11</h1>
          <h1 class="invisible">11</h1>
       <h1 class="invisible">11</h1>    
</body>


</html>
界面

實現聯動的Jquery語句:

 myChart.on('click',function (params) {
                                // 獲取table下所有的tr
                                let trs = $("#table tbody tr");
                                for (var i = 0;i<trs.length;i++){
                                    // 獲取tr下所有的td
                                    let tds = trs.eq(i).find("td");
                                    // 先把之前的標記的success去掉
                                    $("#table tbody tr").eq(i).removeClass('success');
                                    var n = 0;
                                    if('${tjzd}'=="jgsx"){
                                        n=4;
                                    }else if('${tjzd}'=="kjhdlx"){
                                        n=5;
                                        
                                    }else{
                                        n=6;
                                    }
                                    // 如果點擊圖示的名字和table下的某一個行的第一個td的值一樣
                                    if (params.name == tds.eq(n).text()){
                                        //設置success狀態
                                        $("#table tbody tr").eq(i).addClass('success');
                                        // 跳轉到頁面指定的id位置
                                        $("html,body").animate({scrollTop:$("#table tbody tr").eq(i).offset().top},1000);
                                    }
                                }
                            });
                            // 當鼠標落在tr時,顯示浮動
                            $("#table tbody").find("tr").on("mouseenter",function () {
                                 var n = 0;
                              if('${tjzd}'=="jgsx"){
                                  n=4;
                              }else if('${tjzd}'=="kjhdlx"){
                                  n=5;
                                  
                              }else{
                                  n=6;
                              }
                                // 獲得當前匹配元素的個數
                                let row = $(this).prevAll().length;
                                // 獲得當前tr下td的名字
                                let name = $("#table tbody").find("tr").eq(row).find("td").eq(n).text();
                                // 設置浮動
                                myChart.dispatchAction({ type: 'showTip',seriesIndex: 0, name:name});//選中高亮
                            });
                            // 當鼠標移開tr時候取消浮動
                             $("#table tbody").find("tr").on("mouseleave",function () {
                                  var n = 0;
                              if('${tjzd}'=="jgsx"){
                                  n=4;
                              }else if('${tjzd}'=="kjhdlx"){
                                  n=5;
                                  
                              }else{
                                  n=6;
                              }
                                // 獲得當前匹配元素的個數
                                let row = $(this).prevAll().length;
                                // 獲得當前tr下td的名字
                                let name = $("#table tbody").find("tr").eq(row).find("td").eq(n).text();
                                // 設置浮動
                                myChart.dispatchAction({ type: 'hideTip', name:name});//選中高亮
                            });

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM