1. 程式人生 > >D3.js 柱形圖資料更新

D3.js 柱形圖資料更新

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() }