溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

d3.js實現(xiàn)創(chuàng)建完整柱形圖的案例

發(fā)布時間:2020-10-16 15:10:09 來源:億速云 閱讀:198 作者:小新 欄目:web開發(fā)

這篇文章主要介紹了d3.js實現(xiàn)創(chuàng)建完整柱形圖的案例,具有一定借鑒價值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。

d3js.org v5.9.2

之前只是各個部分的demo,現(xiàn)在將各部分整合起來,發(fā)現(xiàn)還是學到了不少東西

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

代碼

樣式及數(shù)據(jù)

先是樣式

<style>
    rect {
        fill: pink
    }
    text {
        font-size: 10px;
    }
</style>

接著是數(shù)據(jù)及柱狀圖寬高等

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

創(chuàng)建比例尺

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

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用于柱形圖創(chuàng)建  
yAxisScale用于y軸創(chuàng)建,注意domain()的輸入域,否則刻度數(shù)值大小排列會相反  
xAxisScale用于x軸創(chuàng)建,使用scaleBand序數(shù)比例尺  
之前對比例尺的理解太過膚淺,這里也做了幾個小實驗

console.log(`barScale(0):` + barScale(0));
console.log(`yAxisScale(0):` + yAxisScale(0));
console.log(`xAxisScale(2):` + xAxisScale(2));

顯示如下

d3.js實現(xiàn)創(chuàng)建完整柱形圖的案例

對于barScaleyAxisScale,輸入域相反,所以映射相反,把一篇他人很棒的總結(jié)放于文末

創(chuàng)建柱狀圖

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對象的值進行部分留白

創(chuàng)建坐標軸

/**
 * 創(chuàng)造y軸
 */
let yAxis = d3.axisLeft(yAxisScale);
d3.select('.chart')
    .append('g')
    .attr('transform', 'translate(' + (padding.left - 10) + ',' + padding.top + ') ')
    .call(yAxis);
/**
 * 創(chuàng)建X軸
 */
let xAxis = d3.axisBottom(xAxisScale);
d3.select('.chart')
    .append('g')
    .attr('transform', 'translate(' + (padding.left) + ',' + (padding.top + barHeight) + ')')
    .call(xAxis);

最后創(chuàng)建坐標軸

d3.js實現(xiàn)創(chuàng)建完整柱形圖的案例

感謝你能夠認真閱讀完這篇文章,希望小編分享d3.js實現(xiàn)創(chuàng)建完整柱形圖的案例內(nèi)容對大家有幫助,同時也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,遇到問題就找億速云,詳細的解決方法等著你來學習!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI