[5] D3.js中如何添加坐标轴

本人的个人博客为: www.ourd3js.com

csdn博客为: blog.csdn.net/lzhlzz

转载请注明出处,谢谢。


     第3节中做了一个图标,但没有为它添加一个相应的坐标轴,这样不知道每一个柱形到底有多长。这一节做一个坐标轴。

D3中的坐标轴都是以 svg 图的形式出现的,这也是为什么在第3节中要使用 svg 的方法做柱形图的原因。第4节里我们讲解了 scale (比例)的用法,在做坐标轴的时候也需要用到比例。第4节中,我们说到scale 是一个函数,这一节中的坐标轴也是一个函数,但是用法却有点不同,要注意。

看下面的代码,我们分别定义数据,scale (比例),坐标轴:

		var dataset = [ 30 , 20 , 45 , 12 , 21 ];
		var xScale = d3.scale.linear()
							.domain([0,d3.max(dataset)])
							.range([0,500]);
		var axis = d3.svg.axis()
						.scale(xScale)
						.orient("bottom");

1-4行是定义数据和 scale (比例),关于比例的内容可看上一节。

5-7是定义坐标轴:

  • d3.svg.axis() 调用这个函数就会生成一个坐标轴的函数
  • scale() 这个函数用于指定坐标轴的 scale (比例)
  • orient() 这个函数用于指定坐标轴的分割点和数字的朝向,在哪个方向显示。 bottom 表示在坐标轴的下方显示。

画出坐标轴的代码如下:

		svg.append("g")
			.call(axis);

在 svg 中添加一个g,g是 svg 中的一个属性,是 group 的意思,它表示一组什么东西,如一组 lines , rects ,circles 其实坐标轴就是由这些东西构成的。

上面还调用了一个 call 函数,这个比较重要。在 D3 中,call 相当于定义一个函数,再把选择的元素给它,即相当于如下代码:

function foo(selection) {
  selection
      .attr("name1", "value1")
      .attr("name2", "value2");
}
foo(d3.selectAll("div"))

这段代码等同于:

d3.selectAll("div").call(foo);

所以 svg.append("g").call(axis) 就相当于将选择的g元素传给 axis 函数。

调用之后,坐标轴就会显示在相应的 svg 中。

还可以定义几个css样式改变坐标轴的粗细,字体等等。 transform 属性用于移动坐标轴在 svg 中的位置。

		svg.append("g")
			.attr("class","axis")
			.attr("transform","translate(10,160)")
			.call(axis);

完整的代码如下:

<style>

.axis path,
.axis line{
	fill: none;
	stroke: black;
	shape-rendering: crispEdges;
}

.axis text {
	font-family: sans-serif;
	font-size: 11px;
}

</style>

    <body>  

		<script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script>
        <script>

		var width = 600;
		var height = 600;
		var dataset = [ 30 , 20 , 45 , 12 , 21 ];

		var svg = d3.select("body").append("svg")
								.attr("width",width)
								.attr("height",height);

		var xScale = d3.scale.linear()
							.domain([0,d3.max(dataset)])
							.range([0,500]);

		var axis = d3.svg.axis()
						.scale(xScale)
						.orient("bottom");

		svg.append("g")
			.attr("class","axis")
			.attr("transform","translate(10,160)")
			.call(axis);

		svg.selectAll("rect")
		   .data(dataset)
		   .enter()
		   .append("rect")
		   .attr("x",10)
		   .attr("y",function(d,i){
				return i * 30;
		   })
		   .attr("width",xScale)           //注意这里
		   .attr("height",28)
		   .attr("fill","red");

        </script>  

结果如下图:

以上,谢谢。

[5] D3.js中如何添加坐标轴

时间: 2024-10-13 21:57:09

[5] D3.js中如何添加坐标轴的相关文章

[5.1] D3.js中整合坐标轴 - 图表 - 文字标签

本人的个人博客为: www.ourd3js.com csdn博客为: blog.csdn.net/lzhlzz 转载请注明出处,谢谢. 前面几节讲解了图标.坐标轴.比例等等,这一节整合这些内容做一个实用的图表.结果图如下: 代码如下所示: <html> <head> <meta charset="utf-8"> <title>Chart</title> </head> <style> .axis pat

d3.js——给柱形图添加事件出现的问题总结

首先做出一个动态的柱形图(这儿用的d3.js的版本是v3,用v4的话有些函数会发生变化) 效果图: 代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>histogramTransitionEvent</title> <style> .axis path, .axis line{ fill

[6] D3.js中如何让图表动起来

本人的个人博客为: www.ourd3js.com csdn博客为: blog.csdn.net/lzhlzz 转载请注明出处,谢谢. [5.1]节中制作了一个比较完善的图表,但它是静态的,想做出它的动态效果吗?在D3中只需要短短的几行代码即可. 这一节将涉及4个函数的使用. 1.transition() 启动转变效果只需要添加这个即可.把它加到两种状态之间,例如: .attr("fill","red") .transition() .attr("fill

[2] D3.js中如何使用数据和选择元素

对D3.js或数据可视化有兴趣的朋友欢迎到 www.ourd3js.com 讨论. 接着上一讲的内容,这次讨论如何选择元素和使用数据. 现在页面中有三行文字,代码为: <p>Hello World 1</p> <p>Hello World 2</p> <p>Hello World 3</p> 定义一个集合set,里面有三个元素: var set = ["I like dog","I like cat&qu

[4] D3.js中使用scale(比例)

本人的个人博客为: www.ourd3js.com csdn博客为: blog.csdn.net/lzhlzz 转载请注明出处,谢谢. 在上一节中使用了一个很重要的概念 - scale (这个不知道翻译成什么,暂且叫它比例).本节将重点介绍它的相关使用方法. 在介绍 scale 之前,先介绍两个经常和 scale 一起出现的函数,在上一节中也出现了. d3.max() d3.min() 它们用于求一个数组中的最大值和最小值,如果是一维数组,使用方法如下: var dataset = [ 30,

[2.1] D3.js中关于如何选择,插入,删除元素

对D3.js或数据可视化有兴趣的朋友欢迎到 www.ourd3js.com 讨论,本人博客首页为: http://blog.csdn.net/lzhlzz ,转载请注明出处,谢谢. 在D3.js中,选择元素的函数有两个:select 和 selectAll . 先说明一下它们的区别: select 是选择所有指定元素的第一个 selectAll 是选择指定元素的全部(以用于后面同时操作) 来看一个具体的例子,现有如下代码: <html> <head> <meta charse

d3.js中data(), enter() 和 exit()的作用

我在刚接触使用d3.js的时候,最感到困惑的一个地方是data(), enter(), exit()这几个操作. 在我接触一段时间,有了一些了解之后,简单说说我的理解. data() 先看一个例子: <body> <p></p> <p></p> <p></p> </body> 执行代码: d3.select("body").selectAll("p").data([1,

D3.js中对array的使用

由于D3类库和array密切相关,我们有必要讨论一下D3中的数据绑定以及在数组内部运算的方法. 1.D3中的数组 和其他编程语言一样,D3的数组元素可以是数字或者字符等类型,例如: someData=[20,36,48,59,600,88]; 此外,考虑json数据在网络传输中的便利性,D3数组也支持将json对象,如: someBook=[{name:"book1", price: 50}, {name:"book2", price: 150}, {name:&q

D3.js的v5版本入门教程(第十二章)—— D3.js中各种精美的图形

D3.js的v5版本入门教程(第十二章) D3中提供了各种制作常见图形的函数,在d3的v3版本中叫布局,通过d3.layout.xxx,来新建,但是到了v5,新建一个d3中基本的图形的方式变了(我也并不知道是不是还叫布局,我觉得也可以这么叫,反正布局指的也是一个绘图函数) 下面是d3中一些常见的部分图形 bubble —— 泡泡图 packing —— 打包图 bundling —— 捆图 force —— 力导向图 chord —— 弦图 pie——饼状图 tree——树状图 中国地图 我们利