本人的个人博客为: 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>

结果例如以下图:


    以上。谢谢。






【 D3.js 入门系列 --- 5 】 怎样加入坐标轴的更多相关文章

  1. 【 D3.js 入门系列 — 11 】 入门总结

    D3 新专题首页 一转眼,这个入门系列已经积累了二十二篇文章之多,我想作为 D3.js 这款数据可视化工具的入门来说已经足够了.相信仅仅要看完本系列.以后全然能够在辅以查询的情况下完毕大部分可视化工作 ...

  2. 【 D3.js 入门系列 — 1 】 第一个程序 HelloWorld

    记得以前刚上大一学 C 语言的时候,写的第一个程序就是在控制台上输出 HelloWorld .当时很纳闷,为什么要输出这个.老师解释说所有学编程入门的第一个程序都是在屏幕上输出 HelloWorld, ...

  3. 【 D3.js 入门系列 --- 3 】 做一个简单的图表!

    前面说了几节,都是对文字进行处理,这一节中将用 D3.js 做一个简单的柱形图. 做柱形图有很多种方法,比如用 HTML 的 div 标签,或用 svg . 推荐用 SVG 来做各种图形.SVG 意为 ...

  4. 【 D3.js 入门系列 --- 2.1 】 关于如何选择,插入,删除元素

    在D3.js中,选择元素的函数有两个:select 和 selectAll . 先说明一下它们的区别: select 是选择所有指定元素的第一个 selectAll 是选择指定元素的全部(以用于后面同 ...

  5. 【 D3.js 入门系列 --- 2 】 如何使用数据和选择元素

    接着上一讲的内容,这次讨论如何选择元素和使用数据.    现在页面中有三行文字,代码为: <p>Hello World 1</p> <p>Hello World 2 ...

  6. 【 D3.js 入门系列 --- 1 】 第一个程序HelloWorld

    下面开始用D3.js处理第一个简单问题,先看下面的代码: <html> <head> <meta charset="utf-8"> <ti ...

  7. 【 D3.js 入门系列 --- 0 】 简介和安装

    D3的全称是(Data-Driven Documents),顾名思义可以知道是一个关于数据驱动的文档的javascript类库.如果你不知道什么是javascript,请先学习javascript的相 ...

  8. 【 D3.js 入门系列 --- 2 】 怎样使用数据和选择元素

    本人的个人博客首页为: http://www.ourd3js.com/  ,csdn博客首页为:http://blog.csdn.net/lzhlzz/. 转载请注明出处,谢谢. 接着上一讲的内容,这 ...

  9. 【 D3.js 入门系列 --- 2.1 】 关于怎样选择,插入,删除元素

    本人的个人博客首页为: http://www.ourd3js.com/  ,csdn博客首页为:http://blog.csdn.net/lzhlzz/. 转载请注明出处,谢谢. 在D3.js中,选择 ...

  10. 【 D3.js 入门系列 --- 0 】 简介及安装

    家是我的个人博客: http://www.ourd3js.com/  ,csdn博客首页为:http://blog.csdn.net/lzhlzz/.转载请注明出处,谢谢. D3的全称是(Data-D ...

随机推荐

  1. python常用内置函数整理

    1.最常见的内置函数是print print("Hello World!") 2.数学运算 abs(-5) # 取绝对值,也就是5 round(2.6) # 四舍五入取整,也就是3 ...

  2. CSDN博客用Windows Live Writer方法,终于可以离线编辑了!

    以下是安装WLW 和相关设置: 1. 下载安装WLW (步骤略,可自行下载,官方下载地址:http://www.microsoft.com/zh-cn/download/details.aspx?id ...

  3. 一个杀不死的小强,kill进程无效的原因 记录故障排查过程中kill进程无效的分析过程

    今天在处理一个机器异常负载(1000+)的问题,碰到了一个从未碰到过的情况,遇到了一个异常顽固的分子.我使用了所能想到的所有杀进程的方法,却始终无法干掉这个顽固分子,最后终于在谷歌大神的指引下,干掉了 ...

  4. 在lua中正确使用uuid的方法:

    -- 参考:http://ju.outofmemory.cn/entry/97724local function guid()        local template ="xxxxxxx ...

  5. NetTcpBinding 类nettcpbinding的属性和方法

      一种适合于跨计算机通信的安全可靠的绑定. 继承层次结构   System.Object   System.ServiceModel.Channels.Binding    System.Servi ...

  6. (22)python 自动化

    例子 from selenium import webdriver driver = webdriver.PhantomJS() driver.get("http://www.huhumh. ...

  7. HDU 1029 Ignatius and the Princess IV(数论)

    #include <bits/stdc++.h> using namespace std; int main(){ int n; while(~scanf("%d",& ...

  8. ACM-ICPC北京赛区(2017)网络赛2【后缀数组+Java//不会】

    #1579 : Reverse Suffix Array 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 There is a strong data structure ...

  9. Windows 环境下 Redis 安装

    1.redis官方下载地址:https://redis.io/download,redis 64位下载地址:https://github.com/MicrosoftArchive/redis/rele ...

  10. Oracle 后台进程

    一.基本后台进程       1.数据库写入进程(DBWn):       数据库写入程序讲数据库告诉缓存区中的修改块写入数据文件.对于多数系统来说,一个数据库写入程序(DBW0)就已经足够,但是对于 ...