d3.js製做蜂巢圖表帶動畫效果

圖片描述
以上是效果圖,本圖表使用d3.js v4製做。圖表主要功能是在六邊形格子中顯示數據,點擊底部圖標能夠切換指定格子高亮顯示,圖表能夠隨瀏覽器任意縮放。數組

1.圖表的主體結構是由正六邊形組成,使用d3生成六邊形能夠使用d3-hexbin.js,生成六邊形比較方便,只要給定中心點座標和半徑便可生成六邊形路徑,例如:瀏覽器

var r = 10; // 六邊形半徑
var pos = [[5,5],[10,10]]; // 六邊形中心點座標數組
var hexbin = d3.hexbin() // 使用hexbin.hexagon()便可生成路徑
      .radius(r);
var bins = hexbin(pos); // 獲得生成後的六邊形中心點座標數組

2.圖表的主體使用了高斯模糊濾鏡,使畫面表現出發光效果,背景高亮顏色使用了顏色漸變濾鏡。在svg中使用濾鏡,必須定義在defs中。
高斯模糊濾鏡:app

// 建立defs
var defs = svg.append("defs");
// 添加模糊濾鏡
var filterBlur = defs.append('filter')
 .attr('id', 'filterBlur')
 .attr('x', -1.2)
 .attr('y', -1.2)
 .attr('width', 4)
 .attr('height', 4);
// 添加輔助濾鏡
filterBlur.append('feOffset')
 .attr('result', 'offOut')
 .attr('in', 'SourceGraphic')
 .attr('dx', 0)
 .attr('dy', 0);
// 添加模糊濾鏡
filterBlur.append('feGaussianBlur')
 .attr('result', 'blurOut')
 .attr('in', 'SourceGraphic')
 .attr('stdDeviation', 2);
// 添加輔助濾鏡
filterBlur.append('feBlend')
 .attr('in', 'SourceGraphic')
 .attr('in2', 'blurOut')
 .attr('mode', 'multiply');

重點說一下最後的feBlend,它的做用是把濾鏡效果和原圖混合起來。使用濾鏡的話,直接給元素添加style('filter', 'url(#filterBlur)')便可。
背景高亮使用了顏色漸變濾鏡:svg

// 添加放射性變換,生成空心填充顏色
var warnBg = defs.append("radialGradient")
        .attr("id", "bg")
        .attr('cx', 0.5)
        .attr('cy', 0.5)
        .attr('r', 0.5);
// 添加顏色
warnBg.append('stop')
        .attr('offset', 0.5)
        .attr('style', 'stop-color:rgb(200,200,200);stop-opacity:0.4');
warnBg.append('stop')
        .attr('offset', 1)
        .attr('style', 'stop-opacity:1;stop-color:rgb(123,123,123)');

其中涉及到的關鍵性技術就是這些,其餘方面只要使用通用的d3方法就可實現。
須要注意的是,程序的結構要預先規劃好,最好把主要的功能模塊放在單獨一個函數中,方便調用和後期修改。函數

若是你們有什麼想法或意見能夠交流一下。url

相關文章
相關標籤/搜索