d3.js多系列柱状图

本文介绍如何利用d3.js库绘制多系列的柱状图,虽然图例实现过程较为繁琐,但最终展示效果理想。
摘要由CSDN通过智能技术生成
bar0();
function bar0() {
var dataset=[]; 
var xMarks=[]; 
var w=800; 
var h=520; 
var padding=40; 
//数据 
	 var lineNames=[]; //保存系列名称 
	 var Color = d3.scale.category20();
	 
	 <%ls=a[1][0];
	 for(int ii=2;ii<zhibiao.length+2;ii++){ls=a[1][0];%>
		 var shuju=[];
		 <%for(int i=1;i<a.length;i++){
		 if(a[i][0].equals(ls)){%>
	 shuju.push(<%=a[i][ii]%>);<%ls=a[i][0];
	 }else{	 %>dataset.push(shuju);shuju=[<%=a[i][ii]%>];<%ls=a[i][0];
}}%>
	 dataset.push(shuju);
		 <%}%>

//产生数据 
function getData() 
{ 
	 <%for(int i=1;i<a.length;i++){%>
	 xMarks.push("<%=a[i][1]%>");
	 <%}%>
	 <%for(int i=0;i<tuli.length;i++){
	 	if(tuli[i].length()>19){tuli[i]=tuli[i].substring(0,16)+"...";}
	 	String[] barname=new String[tuli.length];
	 	for(int iii=0;iii<tuli.length/gsnum;iii++){
		 	for(int ii=0;ii<gsnum;ii++){
	 		barname[ii+gsnum*iii]=tuli[tuli.length/gsnum*ii+iii];
	 	}}
	 	%>
	 lineNames.push("<%=barname[i]%>");
	 <%}%>
	 //console.log(xMarks);
	 //console.log(lineNames);
} 

	 //判断是否多维数组,如果不是,则转为多维数组,这些处理是为了处理外部传递的参数设置的,现在数据标准,没什么用 
if(!(dataset[0] instanceof Array)) 
{ 
var tempArr=[]; 
tempArr.push(dataset); 
dataset=tempArr; 
}

//模拟数据 
getData(); 

//定义画布 
var svg=d3.select("body") 
.append("svg") 
.attr("width",w) 
.attr("height",h); 


//x比例尺
var xScale = d3.scale.ordinal()
.domain(d3.range(dataset[0].length))
.rangeRoundBands([0,w-padding],0.2);

max=getMaxdata(dataset);
//纵坐标轴比例尺 
var yScale = d3.scale.linear() 
.domain([0,max]) 
.range([0,280]); 

//定义横轴 
var xAxis = d3.svg.axis() 
.scale(xScale) 
.orient("bottom") 
.ticks(dataset[0].length); 

//添加横坐标轴并通过编号获取对应的横轴标签 
var xBar=svg.append("g") 
.attr("class","axis") 
.attr("transform", "translate(40," + (h - 240) + ")") 
.call(xAxis) 
.selectAll("text&
对比柱状图可以使用d3.js中的矩形图(rect)元素来绘制。以下是一个简单的例子: HTML代码: ```html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>D3.js对比柱状图</title> <script src="https://d3js.org/d3.v5.min.js"></script> </head> <body> <svg id="chart" width="400" height="300"></svg> <script src="script.js"></script> </body> </html> ``` JavaScript代码: ```javascript // 数据 var data = [ {name: 'A', value: 20}, {name: 'B', value: 35}, {name: 'C', value: 10}, {name: 'D', value: 15}, {name: 'E', value: 25} ]; // 定义svg画布大小 var width = 400; var height = 300; // 定义比例尺 var xScale = d3.scaleBand() .domain(data.map(function(d) { return d.name; })) .range([0, width]) .padding(0.1); var yScale = d3.scaleLinear() .domain([0, d3.max(data, function(d) { return d.value; })]) .range([height, 0]); // 创建svg元素 var svg = d3.select('#chart') .append('g') .attr('transform', 'translate(' + 50 + ',' + 10 + ')'); // 绘制矩形 svg.selectAll('rect') .data(data) .enter() .append('rect') .attr('x', function(d) { return xScale(d.name); }) .attr('y', function(d) { return yScale(d.value); }) .attr('width', xScale.bandwidth()) .attr('height', function(d) { return height - yScale(d.value); }) .style('fill', 'steelblue'); ``` 解释: 1. 定义数据,包含每个柱子的名称和值。 2. 定义画布大小。 3. 定义x轴和y轴的比例尺,x轴比例尺使用`scaleBand`,y轴比例尺使用`scaleLinear`。 4. 创建svg元素,并将其偏移50像素到右侧和10像素到下方。 5. 绘制矩形,使用`selectAll`和`data`方法绑定数据,使用`enter`方法进入数据,使用`append`方法添加矩形元素,使用`attr`方法设置x、y、width和height属性,使用`style`方法设置颜色。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值