d3.v4制作饼图

使用d3v4版本制作饼图

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>D3 Page Template</title>
    <!--script src="https://d3js.org/d3.v4.min.js"></script-->
    <script src="d3.v4.js"></script>

</head>
<body>

<h4>arc Generater</h4>
<button id ='pie'>pie</button>
<button id="pie2">pie*2</button>
<button id="rose">rose</button>
<br/>
<br/>


<script type="text/javascript">
//饼图
var w=600,h=400

var svg=d3.select("body")
        .append("svg")
        .attr("width",w)
        .attr("height",h)
        .style("background-color","lavender")
		
	
	
function renderRose(){

var perAngle=2*Math.PI/10  //一块大小

var data=d3.range(10).map(function(i){
	return{
		innerRadius:35,
		outerRadius:45+15*(i+1),
		startAngle:perAngle*i,
		endAngle:perAngle*(i+1),
	}
	
})
console.log(data)

var arc=d3.arc()

svg.selectAll('g').remove()
var roseG=svg.append('g')
			.attr('class','roseg')
			.attr('transform','translate('+w/2+','+h/2+')')

var roseSelection=roseG.selectAll('path.rose')
						.data(data)
						
roseSelection.enter()
			.append('path')
			.attr('class','rose')
			.attr('d',function(d,i){return arc(d)})
			.attr('fill',function(d,i){return 'rgba('+i*15%255+','+i*8%255+',255,0.6)'})

			.on('mouseover',function(){
				d3.select(this)
				.style('opacity',0.2)
			})
			
			.on('mouseout',function(){
				d3.select(this)
				.style('opacity',1)
			})
			
roseSelection.attr('d',function(d,i){return arc(d)})
			
roseSelection.exit().remove()
}

		
var color=d3.scaleOrdinal(d3.schemeCategory20c)	
//renderPie(50,150,Math.PI)
function renderPie(innerRadius,outerRadius,endAngle){
	
// var data=[{
// 	startAngle:0,//起始角度
// 	endAngle:endAngle*0.1,//终止角度	
// 	},
// 	{
// 		startAngle:endAngle*0.1,//起始角度
// 		endAngle:endAngle*0.3,//终止角度	
// 	},
// 	{
// 		startAngle:endAngle*0.3,//起始角度
// 		endAngle:endAngle,//终止角度	
// 	},
// 	]
var data=[
    {startAngle:0,endAngle:endAngle*0.1},
   {startAngle:endAngle*0.1,endAngle:endAngle*0.2},
   {startAngle:endAngle*0.2,endAngle:endAngle*0.4},
   {startAngle:endAngle*0.4,endAngle:endAngle*0.7},
   {startAngle:endAngle*0.7,endAngle:endAngle*0.8},
   {startAngle:endAngle*0.8,endAngle:endAngle*1}]

//圆弧生成器
var arc=d3.arc()
		.innerRadius(innerRadius)//内部半径
		.outerRadius(outerRadius)//外部半径
svg.selectAll('g').remove()
//添加做图的group  pieG
var pieG=svg.append('g')
			.attr('transform','translate('+w/2+','+h/2+')')
//创建图形
pieG.selectAll('path.pie')
	.data(data)
	.enter()
	.append('path')
	.attr('class','pie')
	.attr('d',function(d,i){return arc(d)})
	.style('fill',function(d,i){return color(i)})
	.transition()//进入时的效果
	.duration(1000)
	.attrTween("d",function(d){
		var start={startAngle:0,endAngle:0}
		var interpolate=d3.interpolate(start,d);
		return function(t){return arc(interpolate(t))}
	})
console.log(arc(data[0]))
	
	
}	
//事件监听
d3.select('#pie')
	.on('click',function(){
		renderPie(50,150,Math.PI)
	})
d3.select('#pie2')
	.on('click',function(){
		renderPie(50,150,Math.PI*2)
	})
d3.select('#rose')
	.on('click',function(){
		renderRose()
	})	

//	
renderPielayout(svg)

function renderPielayout(svg){
var data = [
  {"number":  4, "name": "Locke"},
  {"number":  8, "name": "Reyes"},
  {"number": 15, "name": "Ford"},
  {"number": 16, "name": "Jarrah"},
  {"number": 23, "name": "Shephard"},
  {"number": 42, "name": "Kwon"}
];

//用pie布局来生成创建圆弧的角度数据

var pieData=d3.pie()(data.map(function(d,i){return d.number}))
console.log(pieData)

//圆弧生成器
var arc=d3.arc()
		.innerRadius(50)//内部半径
		.outerRadius(150)//外部半径
svg.selectAll('g').remove()
//添加做图的group  pieG
var pieG=svg.append('g')
			.attr('transform','translate('+w/2+','+h/2+')')
//创建图形
pieG.selectAll('path.pie')
	.data(pieData)
	.enter()
	.append('path')
	.attr('class','pie')
	.attr('d',function(d,i){return arc(d)})
	.style('fill',function(d,i){return color(i)})
	.transition()//进入时的效果
	.duration(1000)
	.attrTween("d",function(d){
		var start={startAngle:0,endAngle:0}
		var interpolate=d3.interpolate(start,d);
		return function(t){return arc(interpolate(t))}
	})


}


	
	
	
	
	
	
	
	
</script>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

decadent7

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值