首頁 > web前端 > js教程 > 主體

d3.js實作建立完整長條圖的程式碼介紹

不言
發布: 2019-04-04 16:47:30
轉載
3368 人瀏覽過

這篇文章帶給大家的內容是關於d3.js實現創建完整長條圖的程式碼介紹,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

d3js.org v5.9.2  

之前只是各部分的demo,現在將各部分整合起來,發現還是學到了不少東西 

主要是加深了對scale(比例尺)的理解

代碼

樣式及資料

先是樣式

<style>
    rect {
        fill: pink
    }
    text {
        font-size: 10px;
    }
</style>
登入後複製

接著是資料及長條圖寬高等

const
    data = [3, 6, 10, 25],
    barWidth = 100,
    barHeight = 300,
    padding = { //svg留白用
        top: 100,
        right: 100,
        bottom: 100,
        left: 100
    };
登入後複製

創建比例尺

實踐之後對比例尺與坐標軸的理解加深了一點

let barScale = d3.scaleLinear().domain([0, d3.max(data)]).range([0, barHeight]),
    yAxisScale = d3.scaleLinear().domain([d3.max(data), 0]).range([0, barHeight]),//y轴使用线性比例尺,注意domain输入域
    xAxisScale = d3.scaleBand().domain([1, 2, 3, 4]).range([0, (barWidth - 1) * data.length]); //x轴使用scaleBand比例尺
登入後複製

barScale用於柱形圖創建 
yAxisScale用於y軸創建,注意domain()的輸入域,否則刻度數值大小排列會相反 
xAxisScale用於x軸創建,使用scaleBand序數比例尺 
之前對比例尺的理解太過膚淺,這裡也做了幾個小實驗

console.log(`barScale(0):` + barScale(0));
console.log(`yAxisScale(0):` + yAxisScale(0));
console.log(`xAxisScale(2):` + xAxisScale(2));
登入後複製

顯示如下

d3.js實作建立完整長條圖的程式碼介紹

對於barScaleyAxisScale,輸入域相反,所以映射相反,把一個他人很棒的總結放於文末

建立柱狀圖

let barContainer = d3.select('.chart')
    .attr('width', data.length * barWidth + padding.left + padding.right)
    .attr('height', barHeight + padding.top + padding.bottom)
    .selectAll('g')
    .data(data).enter().append('g')
    .attr('transform', (d, i) => {
        return 'translate(' + (padding.left + i * barWidth) + ',' + (padding.top + barHeight - barScale(d)) + ')'
    });
barContainer.append('rect')
    .attr('height', d => barScale(d))
    .attr('width', barWidth - 1);
barContainer
    .append('text')
    .text(d => d)
    .attr('y', 10)
    .attr('x', barWidth / 2 - 5);
登入後複製

這裡使用了先前定義的padding物件的值進行部分留白

建立座標軸

/**
 * 创造y轴
 */
let yAxis = d3.axisLeft(yAxisScale);
d3.select('.chart')
    .append('g')
    .attr('transform', 'translate(' + (padding.left - 10) + ',' + padding.top + ') ')
    .call(yAxis);
/**
 * 创建X轴
 */
let xAxis = d3.axisBottom(xAxisScale);
d3.select('.chart')
    .append('g')
    .attr('transform', 'translate(' + (padding.left) + ',' + (padding.top + barHeight) + ')')
    .call(xAxis);
登入後複製

最後建立座標軸

d3.js實作建立完整長條圖的程式碼介紹

【相關推薦:JavaScript影片教學

以上是d3.js實作建立完整長條圖的程式碼介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:segmentfault.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板