iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 26
0
Modern Web

資料視覺化!D3入門到實戰系列 第 26

Day26 實戰!Github Heat Map 產生器_將顏色套用到圖表中

  • 分享至 

  • xImage
  •  

昨天我們做好了一個顏色的選擇器,讓用戶能夠選擇自己喜歡的顏色,那麼我們接下來就將用戶選擇的顏色能夠呈現在圖表當中。

用戶選擇顏色,該在什麼時間點重新畫圖表?如果每次更新一個顏色就重新畫的話不太合理,畢竟用戶應該還在選擇顏色當中,所以最適合的時機是在關掉彈出框的時候。因此我們能在HeatMap的component當中新增一個useEffect的hook,讓modal被關掉的時候圖表能重新畫。

useEffect(() => {
    if (!isModalOpen) {
      d3.select(`#${id} svg`).remove(); //先把原本的remove掉
      d3.selectAll(`#${id} .${styles.messageWrapper}`).remove(); //記得也要remove那些tooltip
      handleDrawMap();
    }
}, [isModalOpen]);

再來就是把變數的color替代掉寫死的color,這邊要注意的是domain array的計算方式,其實最小值為0,最大值為數據中最大值的等差數列:

const generateDomain = (colorLength, max) => {
  const result = [];
  const first = 0;
  const tolerance = max / (colorLength - 1); //公差
  for (let i = 0; i < colorLength; i += 1) {
    result.push(first + i * tolerance);
  }
  return result;
}

const colorScale = d3
    .scaleLinear()
    .domain(generateDomain(colors.length, d3.max(data.map(e => e.value))))
    .range(colors);

這樣就能畫出不同顏色的圖表囉
https://ithelp.ithome.com.tw/upload/images/20190927/20119937fbrmj1QX9V.png


上一篇
Day25 實戰!Github Heat Map 產生器_製作顏色選擇器
下一篇
Day27 實戰!Github Heat Map 產生器_製作時間選擇器
系列文
資料視覺化!D3入門到實戰30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言