2018-12-02-學(xué)習(xí)周報(bào)

內(nèi)容要點(diǎn)

  • d3圖表的一些更為復(fù)雜的操作,希望此次的學(xué)習(xí)內(nèi)容可以在之后的分享里面為大家提供一些繪圖和可視化操作上的思路,并且希望得到大家的指正和建議

內(nèi)容詳情

  1. 三種類型的圖表繪制


    image.png
image.png
image.png

三個(gè)圖表對(duì)應(yīng)的代碼鏈接如下:
圖1
圖2
圖3

  1. 相關(guān)的api記錄(上一次學(xué)習(xí)總結(jié)中的api不再仔細(xì)介紹)
  • d3.extent(array[, accessor])
    用于求解范圍,分別有兩個(gè)參數(shù),為數(shù)組array與讀取數(shù)據(jù)的函數(shù)accessor,如果沒有設(shè)置accessor,則直接從array中找到最大值最小值,作為輸出范圍,如果有accessor,則根據(jù)accessor函數(shù)自定義訪問array中的數(shù)據(jù)。例如:
let x = d3.scaleTime()
  .domain(d3.extent(data, d => new Date(d.date)))
  .range([margin.left, width - margin.right]);

定義域domain函數(shù)中,d3.extent(data, d => new Date(d.date))表示我們需要從data數(shù)組中的讀取每一個(gè)數(shù)組元素的date屬性值,找出所有date中的最大值最小值作為最后輸出的范圍。

  • d3.max(array[, accessor])
    顧名思義,找到數(shù)組中的最大值,accessor同樣是數(shù)據(jù)訪問自定義方式。

  • pow.nice()
    將輸入范圍擴(kuò)展到漂亮的整數(shù),如圖一展示的縱坐標(biāo)的范圍就是通過nice調(diào)整到合適的范圍,這個(gè)函數(shù)可以說是非常人性化了,不需要我們手動(dòng)的計(jì)算合適的計(jì)數(shù)范圍。

  • ticks
    從比例尺的 domain 中返回具有代表性的日期刻度。但是此處還有一些細(xì)節(jié)的東西,需要詳細(xì)描述,參考

  • tickSizeOuter
    外側(cè)刻度大小


    image.png

    在頂部的三個(gè)圖中,外側(cè)刻度均設(shè)置為0。

  • clone
    復(fù)制元素。
    圖2可以看到在縱坐標(biāo)處有一個(gè)我的步數(shù)的縱坐標(biāo)圖例。此處的圖例text元素就是通過復(fù)制最頂部的縱坐標(biāo)刻度14000得到的,重新設(shè)置xy位置,并填入新的文本,即可制作縱軸指示圖例。此處參考了d3畫廊observable上大師們的做法。大師的作品

  • defined
    缺省訪問器,使用方式如下圖。在編寫折線生成器的時(shí)候,過濾掉份非數(shù)字的坐標(biāo),可以有效的防止圖線斷裂或繪制失敗的情況發(fā)生。

let line = d3.line()
  .defined(d => !isNaN(d.value)) // 防止出現(xiàn)非數(shù)字值導(dǎo)致的圖線斷裂
  .x(d => x(new Date(d.date)))
  .y(d => y(d.value));
  • call(熟悉的call/apply/bind)
  • tickFormat
  • d3.timeFormat
    (坐標(biāo)的自定義顯示格式,此處用在了橫坐標(biāo)時(shí)間的格式化上,可以看到頂部三個(gè)圖的橫軸時(shí)間格式是不同的)
// 圖2
let xAxis = g => g
  .attr("transform", `translate(0,${height - margin.bottom})`)
  .call(d3.axisBottom(x)
    .ticks(width / 80)
    .tickSizeOuter(0)
    .tickFormat(d3.timeFormat('%Y-%m-%d'))
  )
  .call(g => g.selectAll('.tick text')
    .attr('y', 10)
    .attr('x', 30)
    .attr('transform', 'rotate(25)')
  );
// 圖3
let xAxis = g => g
  .attr("transform", `translate(0,${height - margin.bottom})`)
  .call(d3.axisBottom(x)
    .ticks(width / 80)
    .tickSizeOuter(0)
    .tickFormat(d3.timeFormat('%Y年%m月%d日'))
  )
  .call(g => g.selectAll('.tick text')
    .attr('y', 10)
    .attr('x', 30)
    .attr('transform', 'rotate(25)')
  );

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • d3 (核心部分)選擇集d3.select - 從當(dāng)前文檔中選擇一系列元素。d3.selectAll - 從當(dāng)前文...
    謝大見閱讀 3,585評(píng)論 1 4
  • 國(guó)家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說閱讀 12,522評(píng)論 6 13
  • 直方圖主要用在數(shù)據(jù)圖表,作為對(duì)比數(shù)據(jù),用柱體高度的高低,形象直觀地表達(dá)出來,往往與折線圖配合使用,而折線圖便于從眾...
    理想是試閱讀 1,092評(píng)論 0 0
  • 1.發(fā)現(xiàn)故事 本課講述可視化用到的:敘事結(jié)構(gòu)數(shù)據(jù)收集過程數(shù)據(jù)處理 2.新聞方法 給可視化添加語境圍繞數(shù)據(jù)進(jìn)行敘事 ...
    esskeetit閱讀 3,093評(píng)論 0 2
  • 嗨,你好! 我們相識(shí)多年, 從青春年少到兩鬢斑白, 我見證了你一路走來的歷程。 總覺得上天厚待于你, 未曾讓你經(jīng)歷...
    五月的荷閱讀 619評(píng)論 10 14

友情鏈接更多精彩內(nèi)容