Echarts3 力導向佈局圖

来源:http://www.cnblogs.com/koala2016/archive/2016/12/01/6123003.html
-Advertisement-
Play Games

因為項目需要,要求實現類似力導圖效果的圖,我就瞄上了echarts。 註意事項1:由於我的項目要部署到內網,所以js文件要在本地,網上大多力導圖都是echarts2的,而其又依賴zrender基礎庫,下載的echarts2是2.2.7版本,但是去zrender官網下載的2.1版本,用起來說版本最低要 ...


 因為項目需要,要求實現類似力導圖效果的圖,我就瞄上了echarts。

註意事項1:由於我的項目要部署到內網,所以js文件要在本地,網上大多力導圖都是echarts2的,而其又依賴zrender基礎庫,下載的echarts2是2.2.7版本,但是去zrender官網下載的2.1版本,用起來說版本最低要求2.1.1,下載最新又提示缺少文件,引用網頁js反而沒事兒,於是只能選擇echarts3了。

註意事項2:echarts2到echarts3有許多改動的地方,首先echarts3沒有force了,而是把force歸類在graph(關係圖)下了,其次myChart.on()方法的事件簡化了,也有其他方法改動等在此就不一一贅述了,文檔介紹的很清楚。

註意事項3:因為我採用的是標簽式單文件引入(<script src="路徑/echarts.js></script>"),所以也不用require()方法去載入,echarts對象直接用就可以了。

註意事項4:echarts3的api網址:http://echarts.baidu.com/option.html#title,最常用的api在配置項手冊中,瞭解了配置項手冊的東西就能應付大部分應用了,而api選項是一些特殊的方法,也就是不常用的,以下是我啃了3天api的成果,我只把有關力導圖的代碼貼出來了,不知道能不能用,我幾乎是把整個API都寫在註釋里了,希望對新人能有所幫助,在此附上效果圖、html和js的代碼,以供參考。

 

 

 

 

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=8">
<!-- 使用IE8以上的渲染 -->
<!-- <meta name="renderer" content="webkit|ie-comp|ie-stand"> -->
<!-- 三個參數分別代表極速、相容、標準模式,適用於360瀏覽器 -->
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>監控管理系統</title>
<script type="text/javascript" charset="utf-8"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/include/jquery.min.js">
</script> 
<script type="text/javascript" src="${pageContext.request.contextPath}/include/echarts.js">
</script>  <!--導入的為ECharts3的js -->


</head>
<body>

<div style="padding:20px;width:100%;height:100%;"> 

        <!-- 為 ECharts 準備一個具備大小(寬高)的 DOM -->
               <div id="main" style="width: 1104px;height:464px;">
                 
               </div>
           
      <div id='main_1' style="position: relative;height:15px;width: 100%;color:#A52A2A">節點關係提示區</div>
          
 </div>
</body>
</html>

 

 

 

            // 基於準備好的dom,初始化ECharts實例
var myChart = echarts.init(document.getElementById('main'), 'macarons');
// 指定圖表的配置項和數據 var option = { tooltip : { show : true, //預設顯示 showContent:true, //是否顯示提示框浮層 trigger:'item',//觸發類型,預設數據項觸發 triggerOn:'click',//提示觸發條件,mousemove滑鼠移至觸發,還有click點擊觸發 alwaysShowContent:false, //預設離開提示框區域隱藏,true為一直顯示 showDelay:0,//浮層顯示的延遲,單位為 ms,預設沒有延遲,也不建議設置。在 triggerOn 為 'mousemove' 時有效。 hideDelay:200,//浮層隱藏的延遲,單位為 ms,在 alwaysShowContent 為 true 的時候無效。 enterable:false,//滑鼠是否可進入提示框浮層中,預設為false,如需詳情內交互,如添加鏈接,按鈕,可設置為 true。 position:'right',//提示框浮層的位置,預設不設置時位置會跟隨滑鼠的位置。只在 trigger 為'item'的時候有效。 confine:false,//是否將 tooltip 框限制在圖表的區域內。外層的 dom 被設置為 'overflow: hidden',或者移動端窄屏,導致 tooltip 超出外界被截斷時,此配置比較有用。 transitionDuration:0.4,//提示框浮層的移動動畫過渡時間,單位是 s,設置為 0 的時候會緊跟著滑鼠移動。 formatter: function (params, ticket, callback) { //判斷數據,提供相應的url。 var path=""; var node=params.data; //當前選中節點數據 var category=params.data.category; //選中節點圖例0負載 1中間件 2埠號 3資料庫 4用戶名 if(category==2){ //為jvm 虛擬機各類參數的路徑 path = "${ctx}/weblogic.do?host=" + node.host + "&port=" + node.port + "&username=" + node.username + "&pwd=" + node.pwd; //準備訪問路徑 }else if(category==4){ //為jdbc 資料庫的路徑 path = "${ctx}/oracle.do?host=" + node.host + "&port=" + node.port + "&username=" + node.username + "&pwd=" + node.pwd + "&instance=" + node.instance; //準備訪問路徑 } console.log(params); $.ajax({ async : true,//設置異、同步載入 cache : false,//false就不會從瀏覽器緩存中載入請求信息了 type : 'post', dataType : "json", url : path,//請求的action路徑 success : function(data) { //請求成功後處理函數。 //加工返回後的數據 debugger; if(category==2){ //當選擇埠號時 var res = 'jvm最大記憶體值:' + data.memoryMaxSize+'<br/>'; res+='jvm空閑記憶體值:'+data.memoryFreeSize+'<br/>'; res+='jvm記憶體使用率:'+data.memoryPer+'<br/>'; res+='空閑線程:'+data.ideThread+'<br/>'; res+='匯流排程:'+data.totalThread+'<br/>'; res+='每秒處理的線程數比率:'+data.throuhput+'<br/>'; callback(ticket,res); }else if(category==4){//當選擇用戶名時 var res = '當前鏈接數:'+data.processCount+'<br/>'; res+='最大鏈接數:'+data.maxProcessCount+'<br/>'; callback(ticket,res); } }, error : function() {//請求失敗處理函數 $.messager.alert('警告', '請求失敗!', 'warning'); } }); if(category==2||category==4){ //當選擇埠號與用戶名時提示載入 return "loading"; }else{ //其他情況顯示所屬圖例以及名稱 return myChart.getOption().series[params.seriesIndex].categories[params.data.category].name+":"+params.name; } } }, legend : { //=========圖表控制項 show : true, data : [ { name : '負載', icon : 'rect'//'circle', 'rect', 'roundRect', 'triangle', 'diamond', 'pin', 'arrow' }, { name : '中間件', icon : 'roundRect' }, { name : '埠號', icon : 'circle' }, { name : '資料庫', icon : 'circle' },{ name : '用戶名', icon : 'roundRect' } ] }, series : [ { type : 'graph', //關係圖 name : "監控管理系統", //系列名稱,用於tooltip的顯示,legend 的圖例篩選,在 setOption 更新數據和配置項時用於指定對應的系列。 layout : 'force', //圖的佈局,類型為力導圖,'circular' 採用環形佈局,見示例 Les Miserables legendHoverLink : true,//是否啟用圖例 hover(懸停) 時的聯動高亮。 hoverAnimation : true,//是否開啟滑鼠懸停節點的顯示動畫 coordinateSystem : null,//坐標系可選 xAxisIndex : 0, //x軸坐標 有多種坐標系軸坐標選項 yAxisIndex : 0, //y軸坐標 force : { //力引導圖基本配置 //initLayout: ,//力引導的初始化佈局,預設使用xy軸的標點 repulsion : 100,//節點之間的斥力因數。支持數組表達斥力範圍,值越大斥力越大。 gravity : 0.03,//節點受到的向中心的引力因數。該值越大節點越往中心點靠攏。 edgeLength :80,//邊的兩個節點之間的距離,這個距離也會受 repulsion。[10, 50] 。值越小則長度越長 layoutAnimation : true //因為力引導佈局會在多次迭代後才會穩定,這個參數決定是否顯示佈局的迭代動畫,在瀏覽器端節點數據較多(>100)的時候不建議關閉,佈局過程會造成瀏覽器假死。 }, roam : true,//是否開啟滑鼠縮放和平移漫游。預設不開啟。如果只想要開啟縮放或者平移,可以設置成 'scale' 或者 'move'。設置成 true 為都開啟 nodeScaleRatio : 0.6,//滑鼠漫游縮放時節點的相應縮放比例,當設為0時節點不隨著滑鼠的縮放而縮放 draggable : true,//節點是否可拖拽,只在使用力引導佈局的時候有用。 focusNodeAdjacency : true,//是否在滑鼠移到節點上的時候突出顯示節點以及節點的邊和鄰接節點。 //symbol:'roundRect',//關係圖節點標記的圖形。ECharts 提供的標記類型包括 'circle'(圓形), 'rect'(矩形), 'roundRect'(圓角矩形), 'triangle'(三角形), 'diamond'(菱形), 'pin'(大頭針), 'arrow'(箭頭) 也可以通過 'image://url' 設置為圖片,其中 url 為圖片的鏈接。'path:// 這種方式可以任意改變顏色並且抗鋸齒 //symbolSize:10 ,//也可以用數組分開表示寬和高,例如 [20, 10] 如果需要每個數據的圖形大小不一樣,可以設置為如下格式的回調函數:(value: Array|number, params: Object) => number|Array //symbolRotate:,//關係圖節點標記的旋轉角度。註意在 markLine 中當 symbol 為 'arrow' 時會忽略 symbolRotate 強制設置為切線的角度。 //symbolOffset:[0,0],//關係圖節點標記相對於原本位置的偏移。[0, '50%'] edgeSymbol : [ 'none', 'none' ],//邊兩端的標記類型,可以是一個數組分別指定兩端,也可以是單個統一指定。預設不顯示標記,常見的可以設置為箭頭,如下:edgeSymbol: ['circle', 'arrow'] edgeSymbolSize : 10,//邊兩端的標記大小,可以是一個數組分別指定兩端,也可以是單個統一指定。 itemStyle : {//===============圖形樣式,有 normal 和 emphasis 兩個狀態。normal 是圖形在預設狀態下的樣式;emphasis 是圖形在高亮狀態下的樣式,比如在滑鼠懸浮或者圖例聯動高亮時。 normal : { //預設樣式 label : { show : true }, borderType : 'solid', //圖形描邊類型,預設為實線,支持 'solid'(實線), 'dashed'(虛線), 'dotted'(點線)。 borderColor : 'rgba(255,215,0,0.4)', //設置圖形邊框為淡金色,透明度為0.4 borderWidth : 2, //圖形的描邊線寬。為 0 時無描邊。 opacity : 1 // 圖形透明度。支持從 0 到 1 的數字,為 0 時不繪製該圖形。預設0.5 }, emphasis : {//高亮狀態 } }, lineStyle : { //==========關係邊的公用線條樣式。 normal : { color : 'rgba(255,0,255,0.4)', width : '3', type : 'dotted', //線的類型 'solid'(實線)'dashed'(虛線)'dotted'(點線) curveness : 0.3, //線條的曲線程度,從0到1 opacity : 1 // 圖形透明度。支持從 0 到 1 的數字,為 0 時不繪製該圖形。預設0.5 }, emphasis : {//高亮狀態 } }, label : { //=============圖形上的文本標簽 normal : { show : true,//是否顯示標簽。 position : 'inside',//標簽的位置。['50%', '50%'] [x,y] textStyle : { //標簽的字體樣式 color : '#cde6c7', //字體顏色 fontStyle : 'normal',//文字字體的風格 'normal'標準 'italic'斜體 'oblique' 傾斜 fontWeight : 'bolder',//'normal'標準'bold'粗的'bolder'更粗的'lighter'更細的或100 | 200 | 300 | 400... fontFamily : 'sans-serif', //文字的字體系列 fontSize : 12, //字體大小 } }, emphasis : {//高亮狀態 } }, edgeLabel : {//==============線條的邊緣標簽 normal : { show : false }, emphasis : {//高亮狀態 } }, //別名為nodes name:影響圖形標簽顯示,value:影響選中後值得顯示,category:所在類目的index,symbol:類目節點標記圖形,symbolSize:10圖形大小 //label:標簽樣式。 data : [ { id : 0, category : 0, name : '101.133.8.88', symbol : 'roundRect', value : 20, symbolSize : 80 }, { id : 1, category : 1, name : '192.168.8.88', symbol : 'rect', value : 20, symbolSize : 70 }, { id : 2, category : 2, name : '7001', symbol : 'circle', value : 20, symbolSize : 60, yId:"jvm", host:"192.168.6.37", port:"7001", username:"weblogic", pwd:"weblogic1" }, { id : 3, category : 2, name : '7100', symbol : 'circle', value : 20, symbolSize : 60 }, { id : 4, category : 1, name : '102.12.33.23', symbol : 'rect', value : 20, symbolSize : 70 }, { id : 5, category : 2, name : '7001', symbol : 'circle', value : 20, symbolSize : 60 }, { id : 6, category : 2, name : '7100', symbol : 'circle', value : 20, symbolSize : 60 }, { id : 7, category : 2, name : '7001', symbol : 'circle', value : 20, symbolSize : 60 }, { id : 8, category : 1, name : '101.11.66.6', symbol : 'rect', value : 20, symbolSize : 70 }, { id : 9, category : 2, name : '7101', symbol : 'circle', value : 20, symbolSize : 60 }, { id : 10, category : 2, name : '7101', symbol : 'circle', value : 20, symbolSize : 60 }, { id : 11, category : 2, name : '7001', symbol : 'circle', value : 20, symbolSize : 60 }, { id : 12, category : 2, name : '7100', symbol : 'circle', value : 20, symbolSize : 60 }, { id : 13, category : 3, name : '192.168.44.44', symbol : 'circle', value : 20, symbolSize : 70 }, { id : 14, category : 3, name : '192.168.33.33', symbol : 'circle', value : 20, symbolSize : 70 }, { id : 15, category : 3, name : '192.168.22.22', symbol : 'circle', value : 20, symbolSize : 70 }, { id : 16, category : 4, name : '55555555555', symbol : 'circle', value : 20, symbolSize : 70, yId:"jdbc", port:"1521", host:"192.168.11.11", username:"222222222", pwd:"11111111", instance:"orcl" }], categories : [ //symbol name:用於和 legend 對應以及格式化 tooltip 的內容。 label有效 { name : '負載', symbol : 'rect', label : { //標簽樣式 } }, { name : '中間件', symbol : 'rect' }, { name : '埠號', symbol : 'roundRect' }, { name : '資料庫', symbol : 'roundRect' }, { name : '用戶名', symbol : 'roundRect' } ], links : [ //edges是其別名代表節點間的關係數據。 { source : 1, target : 0 }, { source : 4, target : 0 }, { source : 8, target : 0 }, { source : 2, target : 1 }, { source : 3, target : 1 }, { source : 5, target : 4 }, { source : 6, target : 4 }, { source : 7, target : 4 }, { source : 9, target : 8 }, { source : 10, target : 8 }, { source : 11, target : 8 }, { source : 12, target : 8 }, { source : 13, target : 6 }, { source : 14, target : 6 }, { source : 15, target : 2 }, { source : 16, target : 15 } ] } ] }; // 使用剛指定的配置項和數據顯示圖表。 myChart.setOption(option); /*ECharts3 方法部分 開始*/ function appendPath(params){ //拼接節點關係並顯示在左下角, var option = myChart.getOption(); var series = option.series[params.seriesIndex]; //獲取圖表 var nodesOption = series.data;//獲取所有數據 var links= series.links;//獲取所有連線 if(params.dataType=="node"){ //dataType可以是edge(線條)或node(數據) var id=params.data.id; var categoryName = series.categories[params.data.category].name;//獲取當前節點的圖例名稱 var str=categoryName+":"+nodesOption[id].name; var i = 0; var map = {}; for( i = 0 ; i < links.length; i++){ map[links[i].source] = links[i].target; } while(true){ if(map[id] == undefined){ break; } //獲取父節點的圖例名稱並連接 str =series.categories[nodesOption[map[id]].category].name+":"+nodesOption[map[id]].name+"->" + str; id = map[id] ; } return str; }else if(params.dataType=="edge"){ //當滑鼠停留在連線上時,暫不處理 return ""; } } function openOrFold(params) { //該事件會提示節點間關係 var str = appendPath(params); document.getElementById("main_1").innerHTML = str; return str; } //var ecConfig = echarts.config; echarts2的獲取事件方法,當前為echarts3 myChart.on('mouseover', openOrFold); //'click'、'dblclick'、'mousedown'、'mousemove'、'mouseup'、'mouseover'、'mouseout' /*ECharts3 方法部分 結束*/ /*ECharts3 結束*/

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 感謝您的閱讀。喜歡的、有用的就請大哥大嫂們高抬貴手“推薦一下”吧!你的精神支持是博主強大的寫作動力以及轉載收藏動力。歡迎轉載! 版權聲明:本文原創發表於 【請點擊連接前往】 ,未經作者同意必須保留此段聲明!如有問題請聯繫我,侵立刪,謝謝! 我的博客:http://www.cnblogs.com/GJ ...
  • 單例模式: 分析: 1、單例模式,從字面意思上理解,“單例”,即只有唯一一個實例,通常情況下,定義一個類,然後通過new ClassName()方式來產生具體對象,然而這樣,破壞了一個類只有一個實例,怎麼處理該問題呢?將類的具體化放在類的構造函數來完成。 2、如上方式解決了單例問題,然而,外界如何才 ...
  • 本文地址 原文地址 對於大型網站技術的理解,可以從架構技術原理的組織方式以架構要素作為維度,從系統性能、可用性、伸縮性、擴展性、安全性幾個角度闡述網站架構的技術要點。還有另一種較為直觀的組織方式,是從不同架構層次所使用的網站架構技術這個維度進行描述的。 網站系統架構層次如下圖所示: 這個網站架構層次 ...
  • 很實用的一款插件jQuery瀑布流從不同方向載入3種效果演示線上預覽 下載地址 實例代碼 <section class="grid-wrap"> <ul class="grid swipe-right" id="grid"> <li> <a href="#"><img src="/api/jq/57 ...
  • 一、HTML5新增屬性 1.1、contextmenu contextmenu的作用是指定右鍵菜單。 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> <div id="div1" ...
  • 本文介紹了css3中的box-sizing屬性,在這之前讀者需要預備知識width的範圍。 瀏覽器的支持情況 box-sizing屬性 box-sizing屬性可以有三個值:content-box(defalut),border-box屬性。 <style> div{ width:100px; he ...
  • 1)在折線圖中,有時我們不想讓太多折線顯示,那麼就隱藏,點擊legend區域文字再顯示。 比如我們要隱藏的折線叫”聯盟廣告“,代碼如下 在series中依然有它相關的數據 這樣,當我們點擊的時候,折線就顯示了。 2)折線坐標軸太粗,不夠細?顏色不好看? 那麼,可以這樣改 y軸也同理。 3)分隔線顏色 ...
  • 目錄 一、HTML5概要 1.1、為什麼需要HTML5 1.2、什麼是HTML5 1.3、HTML5現狀及瀏覽器支持 1.4、HTML5特性 1.5、HTML5優點與缺點 1.5.1、優點 1.5.2、缺點 1.6、HTML5效果展示 1.7、HTML5學習與開發工具 1.7.1、基礎要求 1.7. ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...