摘要:在做可視化的很多時候,我們需要在主圖的一角設(shè)置一個縮略圖來掌握全局情況。,縮略圖的繪制完成,很簡單的例子,按照這個思路可以完成大部分可視化的縮略圖繪制。
在做可視化的很多時候,我們需要在主圖的一角設(shè)置一個縮略圖來掌握全局情況。本次將使用力導(dǎo)向圖作為例子,完成縮略圖的實現(xiàn)。
繪制的原理就是依靠主圖的數(shù)據(jù)再畫一個圖出來,無需再次計算,只改變圖形形態(tài)。
最終效果主圖節(jié)點拖動,縮略圖跟著變化。
http://en.jsrun.net/UyiKp/show
依然使用之前例子的力導(dǎo)向圖繪制數(shù)據(jù)及方法
var nodes = [ {value:"66666666",type:"home",index:"0"}, {value:"11111111111",type:"phone",index:"1"}, {value:"22222222222",type:"phone",index:"2"}, {value:"33333333333",type:"phone",index:"3"}, {value:"44444444444",type:"phone",index:"4"}, {value:"55555555555",type:"phone",index:"5"}, {value:"aaa",type:"weixin",index:"6"}, {value:"bbb",type:"weixin",index:"7"}, {value:"ccc",type:"weixin",index:"8"}, {value:"ffffd",type:"weixin",index:"9"}, {value:"eee",type:"weixin",index:"10"}, {value:"fff",type:"weixin",index:"11"}, ]; var links = [ {source:0,target:1}, {source:0,target:2}, {source:0,target:3}, {source:0,target:4}, {source:0,target:5}, {source:2,target:6}, {source:2,target:7}, {source:2,target:8}, {source:3,target:9}, {source:3,target:10}, {source:3,target:11}, ]力導(dǎo)向圖繪制
var height = 500; var width = 500; var svg = d3.select("#forceMap").append("svg") .attr("width",width) .attr("height",height) .attr("id","forceSvg"); var mapG = svg.append("g") .attr("id","forceGroup"); var force = d3.layout.force() .nodes(nodes) .links(links) .size([width,height]) .linkDistance(100) .charge([-1250]) .gravity(0.5) .friction(0.5); force.start(); var linkG = mapG.selectAll(".link") .data(links) .enter() .append("line") .attr("class","link") .attr("stroke","#ccc"); var nodeG = mapG.selectAll(".node") .data(nodes) .enter() .append("circle") .attr("class","node") .attr("r",8) .attr("fill",function(d){ switch(d.type){ case "home": return "red";break; case"phone": return "blue";break; case "weixin": return "green";break; } }) .call(force.drag); //這個例子為節(jié)點添加了可拖動的功能 force.on("tick", function () { linkG.attr("x1", function (d) { return d.source.x; }) .attr("y1", function (d) { return d.source.y; }) .attr("x2", function (d) { return d.target.x; }) .attr("y2", function (d) { return d.target.y; }); nodeG.attr("cx", function (d) { return d.x }) .attr("cy", function(d){ return d.y }); drawThumb(); //在tick最后,執(zhí)行繪制縮略圖 });
這次代碼中添加了drag方法,為了使節(jié)點可拖動。
繪制縮略圖function drawThumb(){ //每次繪制前刪除之前的圖形(這是一種簡單有效的動畫理論,但是比較消耗資源,之后會介紹如何節(jié)省資源完成需求) d3.select("#thumbSvg").remove(); var thumbSvg = d3.select("#thumbMap").append("svg") .attr("width",100) .attr("height",100) .attr("id","thumbSvg"); var thumbG = thumbSvg.append("g") .attr("id","thumbGroup"); var thumbLink = thumbG.selectAll(".tlink") .data(links) .enter() .append("line") .attr("class","tlink") .attr("stroke","#ccc") //縮略圖繪制和主圖的差異在這,不需要tick,只需要把節(jié)點的坐標直接賦予即可 .attr("x1", function (d) { return d.source.x/5;//這里的除5是縮略圖和主圖的比例,thumbWidth/forceWidth }) .attr("y1", function (d) { return d.source.y/5; }) .attr("x2", function (d) { return d.target.x/5; }) .attr("y2", function (d) { return d.target.y/5; }); var thumbNode = thumbG.selectAll(".tnode") .data(nodes) .enter() .append("circle") .attr("class","tnode") .attr("r",1.2)//圖形尺寸都要縮小 .attr("fill",function(d){ switch(d.type){ case "home": return "red";break; case"phone": return "blue";break; case "weixin": return "green";break; } }) .attr("cx", function (d) { return d.x/5 }) .attr("cy", function(d){ return d.y/5 }); }
在繪制縮略圖時,我在最前面有一個remove方法,就是用新的圖形代替舊的圖形,完成縮略圖的動畫效果,模擬了tick。
但在實際使用中,數(shù)據(jù)量很大時,如此刪了畫畫了刪,非常耗資源。
所以更好的方法是判斷是否有thumbSvg,有的話就只改變node和link的x,y,沒有的話就按上面代碼一樣繪制。
ok,縮略圖的繪制完成,很簡單的例子,按照這個思路可以完成大部分可視化的縮略圖繪制。除了拖動外,還可以添加縮放和平移功能,但注意縮放時所有尺寸的比例都會跟著變化,會復(fù)雜很多。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/88717.html
摘要:數(shù)據(jù)可視化圖表圖表作為數(shù)據(jù)可視化最常見的表現(xiàn)形式之一,往往被以偏概全的認為圖表就是數(shù)據(jù)可視化。嚴格來說,數(shù)據(jù)可視化應(yīng)該是連接數(shù)據(jù)與視覺的一個映射關(guān)系,將數(shù)據(jù)映射成人更容易感知其規(guī)律的可視化結(jié)果。 題目中的新一代是個相對的概念,事實上本文即將介紹的方法已經(jīng)有了生產(chǎn)環(huán)境可用的實現(xiàn)方案(這也側(cè)面佐證了其可行性),但考慮到此方法與現(xiàn)在大部分前端項目中所使用的數(shù)據(jù)可視化方案相比仍有一些優(yōu)勢,因此...
摘要:目標畫布的左上角在目標上軸的位置。允許對繪制的圖像進行縮放。如果不說明,在繪制時圖片高度不會縮放。如果不說明,整個矩形從坐標的和開始,到圖像的右下角結(jié)束。需要繪制到目標上下文中的,源圖像的矩形選擇框的高度。 在上傳圖片進行預(yù)覽時,直接抓取原圖時由于原圖過大會影響性能,即對所上傳圖片進行壓縮小圖展示; 思路: 利用 canvas 對原圖進行壓縮重繪,抓取區(qū)域以中心為基點最大范圍繪制縮略圖...
摘要:和之前用的有啥不同和都是用來生成各類圖表的,區(qū)別的話可以從使用方法和實現(xiàn)方式上是通過來繪制圖形具體使用方法是通過方法初始化一個實例并通過方法生成一個簡單的柱狀圖很輕松搞定。通過來繪制圖形使用時需要先創(chuàng)建畫布元素然后進行各種繪制圖形。 你的淘寶年度消費報告那炫酷的圖表一下子讓人忘了自己花了多少錢,各大門戶網(wǎng)站、媒體都開始大量使用圖表,于是乎又有一批工具等待我們學(xué)習(xí)的路上 什么是D3.js...
閱讀 2570·2021-11-23 09:51
閱讀 2610·2021-11-11 17:21
閱讀 3240·2021-09-04 16:45
閱讀 2535·2021-08-09 13:42
閱讀 2355·2019-08-29 18:39
閱讀 3034·2019-08-29 14:12
閱讀 1426·2019-08-29 13:49
閱讀 3500·2019-08-29 11:17