企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# 音谱图 ## 需求 简版: 我们每1秒随机生成12个数字范围是0-100,在柱状图中让它一直动态变化。 ## 分析 1. 构建一个数据生成器。 2. 构建比例尺x,y。 3. 构建一个更新绘制。 4. 定时器不断的生成数据更新图表。 ## 绘制 ``` javascript //创建svg var svg = d3.select('#root') .append('svg') .attr('width', 600) .attr('height', 600) .style("background-color","rgb(142, 137, 137)"); var margin=[100,100,100,100] var length = 12 //生成几个柱 //创建颜色比例尺 var color = d3.scaleOrdinal(d3.schemeCategory20); //构建y轴的比例尺 var y=d3.scaleLinear() .domain([0,100]).range([400,0]) var x = d3.scaleLinear().domain([0,12]).range([0,400]) function createData(length){ var re=[]; for (let index = 0; index < length; index++) { var item = Math.random().toFixed(2)*100; console.log(item) re.push(item); } return re; } var barG = svg.append('g') .attr('class','#barG') .attr('transform','translate(100,100)') var t = d3.transition() .duration(450)//毫秒 .ease(d3.easeLinear); function updateBar(data){ var rect = barG.selectAll('rect') .data(data) rect.exit().remove(); rect.enter() .append('rect') .attr('y',100) .attr('x',function(d,i){return x(i)}) .attr('width',x(1)) .attr('height',function(d){return 400-y(d)}) .attr('fill',function(d,i){return color(i)})//以上属性是为新标签创建 .merge(rect) .transition(t) .attr('x',function(d,i){return x(i)}) //以下属性是需要更新的属性 .attr('y',function(d){return y(d)}) .attr('height',function(d){return 400-y(d)}) } window.setInterval(function(){ var data = createData(length); updateBar(data); },500) ``` ## 实例 ![](https://box.kancloud.cn/eea7b518c30853f7e9c7dd4c3f33d29b_484x448.gif)