d3.js v5版本——餅圖 簡單餅圖

記錄一下這個餅圖的寫法

simplePie.png

畫餅圖就是扇形+文字的組合。就兩個知識點的運用:

1.餅圖布局d3.pie()

2.弧形生成器d3.arc()

直接先貼代碼

<body>
  <svg height="960" width="800"></svg>

  <script>
    initMap();
    function initMap() {
      var marge = { top: 60, right: 60, bottom: 60, left: 60 },
          svg = d3.select('svg'),
          width = svg.attr('width'),
          height = svg.attr('height');
      
      var g = svg.append('g')
          .attr('transform', 'translate('+ marge.top +', '+ marge.left +')')

      var dataset = [25, 15, 33, 68, 18]

      // 一個顏色比例尺
      var colorScale = d3.scaleOrdinal()
          .domain(d3.range(dataset.length))
          .range(d3.schemeCategory10);

      // 餅圖布局
      var pie = d3.pie();
      // 弧線生成器
      var innerRadius = 0;    // 內(nèi)半徑
      var outerRadius = 100;  // 外半徑
      var arc_generator = d3.arc()
          .innerRadius(innerRadius)
          .outerRadius(outerRadius);

      // 通過餅圖布局轉(zhuǎn)換數(shù)據(jù)
      var pieDate = pie(dataset);
      console.log("pieDate:" + pieDate);

      // ***************繪制******************
      var gs = g.selectAll('.g')
          .data(pieDate)
          .enter()
          .append('g')
          .attr('transform', 'translate('+ width / 2 +', '+ height / 2 +')')

      // 繪制扇形
      gs.append('path')
          .attr('d', function (d) {
            return arc_generator(d);
          })
          .attr('fill', function (d, i) {
            return colorScale(i);   // 設(shè)置顏色
          })
      // 添加文字
      gs.append('text')
            .attr('transform', function (d) {
              return 'translate('+ arc_generator.centroid(d) +')';    // 中心位置
            })
            .attr('text-anchor', 'middle')
            .attr('fill', '#eee')
            .text(function (d, i) {
              return d.data;
            })
    }
  </script>
</body>

創(chuàng)建這個餅圖的步驟和其他的圖都是一樣的

1.先利用布局將數(shù)據(jù)轉(zhuǎn)換為畫圖可以用的數(shù)據(jù)格式,這里d3.pie()就可以將簡單的數(shù)組數(shù)據(jù)轉(zhuǎn)化為換扇形需要的數(shù)據(jù)格式

2.再利用弧線生氣器畫出扇形。這里設(shè)置了兩個屬性:innerRadius和outerRadius。 分別時扇形內(nèi)半徑和外半徑。如果這里將innerRadius設(shè)置為80,畫出的餅圖就會使下面這樣

simplePie2.png

目前這個簡單的餅圖就沒什么好說的了。但這樣最最基本的餅圖也只能學(xué)習(xí)的時候做出來才能有一點點的滿足感。放在真正的項目中就顯得太初級了,到時候就你得需要對細(xì)節(jié)的處理更多了,當(dāng)然也要用到更多的api方法和屬性了。

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

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

  • d3 (核心部分)選擇集d3.select - 從當(dāng)前文檔中選擇一系列元素。d3.selectAll - 從當(dāng)前文...
    謝大見閱讀 3,577評論 1 4
  • 1、通過CocoaPods安裝項目名稱項目信息 AFNetworking網(wǎng)絡(luò)請求組件 FMDB本地數(shù)據(jù)庫組件 SD...
    陽明AI閱讀 16,205評論 3 119
  • 超哥別號 踏雪孤心不老情落拓書生自嘲心逍覺迷遙修行路登徒浪子竊詩賊小超童邪20170313
    WallisW閱讀 206評論 0 0
  • 三十歲之前,我一直彷徨困惑著,因為生事不幸,婚姻不動,我無數(shù)次懷疑過人生,懷疑自己不該來這人世間。直到孩子的降臨,...
    紅太狼一家閱讀 229評論 0 0
  • 近幾年,律師職業(yè)并沒有以其想象力或跨公司合作而聞名。 事實上,一位經(jīng)驗豐富的律師一次提醒我說:“客戶最不需要就是富...
    就有同校的朋閱讀 138評論 0 0

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