d3.js制作动态图表

原创
2018/08/06 17:17
阅读数 1.4K
<html>  
<head>  
	<meta charset="utf-8">  
	<title>完整的柱形图</title>  
</head> 
 
<style>
	.axis path,
	.axis line{
		fill: none;
		stroke: black;
		shape-rendering: crispEdges;
	}
 
	.axis text {
		font-family: sans-serif;
		font-size: 11px;
	}
 
	.MyRect {
		fill: steelblue;
	}
 
	.MyText {
		fill: white;
		text-anchor: middle;
	}
</style>
 
<body>  
	<script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script>  
	<script>
 
	//画布大小
	var width = 400;
	var height = 400;
 
	//在 body 里添加一个 SVG 画布	
	var svg = d3.select("body")
		.append("svg")
		.attr("width", width)
		.attr("height", height);
 
	//画布周边的空白
	var padding = {left:30, right:30, top:20, bottom:20};
 
	//定义一个数组
	var dataset = [10, 20, 30, 40, 33, 24, 12, 5];
		
	//x轴的比例尺
	var xScale = d3.scale.ordinal()
		.domain(d3.range(dataset.length))
		.rangeRoundBands([0, width - padding.left - padding.right]);
 
	//y轴的比例尺
	var yScale = d3.scale.linear()
		.domain([0,d3.max(dataset)])
		.range([height - padding.top - padding.bottom, 0]);
 
	//定义x轴
	var xAxis = d3.svg.axis()
		.scale(xScale)
		.orient("bottom");
		
	//定义y轴
	var yAxis = d3.svg.axis()
		.scale(yScale)
		.orient("left");
 
	//矩形之间的空白
	var rectPadding = 4;
 
	//添加矩形元素
	var rects = svg.selectAll(".MyRect")
		.data(dataset)
		.enter()
		.append("rect")
		.attr("class","MyRect")
		.attr("transform","translate(" + padding.left + "," + padding.top + ")")
		.attr("x", function(d,i){
			return xScale(i) + rectPadding/2;
		} )
		.attr("y",function(d){
			 var min=yScale.domain()[0];
			return yScale(min);
		})
		.attr("width", xScale.rangeBand() - rectPadding )
		.attr("height", function(d){
			return 0;
		})
		 .transition()
			.delay(function(d,i){
					return i*200;
			})
			.duration(2000)
			.ease("bounce")
			.attr("y",function(d){
				return yScale(d);
			})
			.attr("height",function(d){
					return height - padding.top - padding.bottom - yScale(d);
			})
 
	//添加文字元素
	var texts = svg.selectAll(".MyText")
		.data(dataset)
		.enter()
		.append("text")
		.attr("class","MyText")
		.attr("transform","translate(" + padding.left + "," + padding.top + ")")
		.attr("x", function(d,i){
			return xScale(i) + rectPadding/2;
		} )
		.attr("y",function(d){
			return yScale(d);
		})
		.attr("dx",function(){
			return (xScale.rangeBand() - rectPadding)/2;
		})
		.attr("dy",function(d){
			return 20;
		})
		.text(function(d){
			return d;
		})
			.transition()
			.delay(function(d,i){
					return i*200;
			})
			.duration(2000)
			.ease("bounce")
			.attr("y",function(d){
				return yScale(d);
			})
 
	//添加x轴
	svg.append("g")
		.attr("class","axis")
		.attr("transform","translate(" + padding.left + "," + (height - padding.bottom) + ")")
		.call(xAxis); 
		
	//添加y轴
	svg.append("g")
		.attr("class","axis")
		.attr("transform","translate(" + padding.left + "," + padding.top + ")")
		.call(yAxis);
 
</script>  
</body>  
</html>  

效果演示:http://sandbox.runjs.cn/show/5jkotr85

展开阅读全文
加载中

作者的其它热门文章

打赏
0
0 收藏
分享
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部