D3.js 柱形圖資料更新
阿新 • • 發佈:2019-02-11
let dataset = [50, 43, 120, 87, 99, 167, 300];
// svg繪製區域的寬度
let width = 400;
// svg繪製區域的高度
let height = 400;
// 選擇body
let svg = d3.select('body')
// 新增svg
.append('svg')
// 設定svg的寬度屬性
.attr('width', width)
// 設定svg的高度屬性
.attr('height', height);
// 定義上下左右的邊距
let padding = {
top: 20,
right: 20,
bottom: 20,
left: 20
};
// 矩形所佔寬度(包括百空), 單位畫素
let rectStep = 35;
// 矩形所佔寬度(不包括百空), 單位畫素
let rectWidth = 30;
function draw () {
// 獲取矩形的update部分
let updateRect = svg.selectAll('rect')
.data(dataset);
// 獲取矩形的enter部分
let enterRect = updateRect.enter();
// 獲取矩形的exit部分
let exitRect = updateRect.exit();
// 矩形的update部分的處理方法
// 設定顏色為steelbule
updateRect.attr('fill', 'steelblue')
// 設定矩形的x座標
.attr('x', function (d, i) {
return padding.left + i * rectStep;
})
// 設定矩形的y座標
.attr('y', function (d) {
return height - padding.bottom - d;
})
// 設定矩形的寬度
.attr('width', rectWidth)
// 設定矩形的高度
.attr('height', function (d) {
return d;
})
// 矩形的enter部分的處理方法
// 設定矩形顏色為steelblue
enterRect.append('rect')
// 設定顏色為steelbule
.attr('fill', 'steelblue')
// 設定矩形的x座標
.attr('x', function (d, i) {
return padding.left + i *rectStep;
})
// 設定矩形的y座標
.attr('y', function (d) {
return height - padding.bottom -d;
})
// 設定矩形的寬度
.attr('width', rectWidth)
// 設定矩形的高度
.attr('height', function (d) {
return d;
});
// 矩形的exit部分的處理方法
exitRect.remove();
// 獲取文字的update部分
let updateText = svg.selectAll('text')
.data(dataset);
// 獲取文字的enter部分
let enterText = updateText.enter();
// 獲取文字的exit部分
let exitText = updateText.exit();
// 設定文字填充色
updateText.attr('fill', 'white')
// 設定字型大小
.attr('font-size', '14px')
// 後續為文字設定為矩形正中間
.attr('text-anchor', 'middle')
// 設定x的與矩形一樣
.attr('x', function (d, i) {
return padding.left + i * rectStep;
})
// 設定y的與矩形一樣
.attr('y', function (d) {
return height - padding.bottom - d;
})
.attr('dx', rectWidth / 2)
.attr('dy', '1em')
// 設定文字內容
.text(function (d) {
return d;
})
enterText.append('text')
// 設定文字填充色
.attr('fill', 'white')
// 設定字型大小
.attr('font-size', '14px')
// 後續為文字設定為矩形正中間
.attr('text-anchor', 'middle')
// 設定x的與矩形一樣
.attr('x', function (d, i) {
return padding.left + i * rectStep;
})
// 設定y的與矩形一樣
.attr('y', function (d) {
return height - padding.bottom -d;
})
.attr('dx', rectWidth / 2)
.attr('dy', '1em')
.text(function (d) {
return d;
});
exitText.remove();
}
function mysort() {
//資料從小到大排序
dataset.sort(d3.ascending);
draw();
}
function myadd() {
// 新增隨機數
dataset.push(Math.floor(Math.random() * 100))
draw()
}