目标

  在这一章,我们将会重温SVG图形,学习如何使用D3.js来创建这些图形。

  这里会包括前面例子中的SVG基础图形以及如何使用D3.js设置图形的属性。

使用D3.js画一个SVG 的 圆 circle

  可以使用如下代码创建:

<svg width="50" height="50">
<circle cx="25" cy="25" r="25" fill="purple" />
</svg>

  我们在前面的章节已经讲过了使用D3.js来创建SVG圆形。

var jsonCircles = [
{"x_axis":30,"y_axis":30,"radius":20,"color":"greeen"},
{"x_axis":70,"y_axis":70,"radius":20,"color":"purple"},
{"x_axis":110,"y_axis":100,"radius":20,"color":"red"}
]; var svgContainer = d3.select("body").append("svg")
.attr("width",200)
.attr("height",200); var circles =svgContainer.selectAll("circle")
.data(jsonCircles)
.enter()
.append("circle"); var circleAttributes = circles
.attr("cx",function(d){return d.x_axis;})
.attr("cy",function(d){return d.y_axis;})
.attr("r",function(d){return d.radius;})
.style("fill",function(d){return d.color;});

  将上述例子化简后,可以看做这一过程为两步:

  1. 创建SVG容器(SVG坐标空间)
  2. 画圆形

  因此,在最简单的情况,JavaScript代码为:

//创建一个SVG容器
var svgContainer = d3.select("body").append("svg")
.attr("width",200)
.attr("height",200); //画圆形
var circle = svgContainer.append("circle")
.attr("cx",30)
.attr("cy",30)
.attr("r",20);

  结果是:

  画圆的时候,必须的SVG属性是:“cx”、“cy”以及“r”。

  注意——如果我们缺省了“style”-样式函数,那么我们得到的就是一个黑色的圆形。不过也还好,因为首要的是先画出来圆形,之后在考虑的是样式。

  在此要强调的是,使用D3.js画SVG的圆形时,最为重要的属性是:cx,cyr

使用D3.js画SVG的 长方形 Rectangle

  我们可以用下面的代码画出一个长方形:

<svg width="50" height="50">
<rect x="0" y="0" width="50" height="50" fill="green"/>
</svg>

  通过前面的圆形例子,我们大概可以猜得出,创建一个长方形,必须的是“x”,"y","width"以及"height".

  我们也可以把画长方形分成两步:

  1. 创建一个SVG容器(SVG坐标空间)
  2. 画长方形

  因此,在最简单的情况下,我们的JavaScript代码如下:

//创建一个SVG容器
var svgContainer = d3.select("body").append("svg")
.attr("width",200)
.attr("height",200); //画长方形
var rectangle = svgContainer.append("rect")
.attr("x",10)
.attr("y",10)
.attr("width",50)
.attr("height",100);

  结果是:

  画长方形的必须属性是“x”、"y"、"width"以及"height"。

  注意—同上,如果缺省Style()方法,得到的是黑色的长方形。

  两个需要注意的点是:

  • SVG中指代长方形(rectangle)的关键词是rect。因此我们写的是.append("rect")而不是.append("rectangle")。
  • SVG坐标系统的布局中,高height是自上而下的。

  在此要强调的是,使用D3.js画SVG的长方形时,最为重要的属性是:x,y,widthheight

使用D3.js画SVG的 直线 Straight Line

  使用下面的代码可以创建直线:

<svg width="50" height="50">
<line x1="5" y1="5" x2="40" y2="40" stroke="grey" stroke-width="5" />
</svg>

  同样的,我们大概猜到画直线必须的是:"x1","y1","x2","y2".

  我们同样可以分为两步:

  1. 创建SVG容器(SVG坐标空间)
  2. 画直线

  最简单的例子为:

  

//创建SVG容器
var svgContainer = d3.aelect("body").append("svg")
.attr("width",200)
.attr("height",200); //画直线
var line = svgContainer.append("line")
.attr("x1",5)
.attr("y1",5)
.attr("x2",50)
.attr("y2",50)

  结果是:

  我们画的直线在哪了???SVG元素就在那里,但是我们却看不到。

  这是因为SVG的“line”元素就仅仅是“线",在几何学上讲是一维的,他是没有大小粗细的,没有所谓的“内部”。

  这也就是说,“line”元素不可能被“填充(filled)”(即fill属性)。

  也就是说,直线是不占用空间的——因此实际上,我们什么都看不到。

  为了解决这个问题,我们需要确保:

  • .attrbute("stroke-width",NUMBER),其中的NUMBER是指直线的宽
  • .attribute("stroke","COLOR"),其中COLOR是指用来给直线着色的颜色

  因此,修改后的最简例子为:

//创建一个SVG容器
var svgContainer = d3.select("body").append("svg")
.attr("width",200)
.attr("height",200); //画直线
var line = svgContainer.append("line")
.attr("x1",5)
.attr("y1",5)
.attr("x2",50)
.attr("y2",50)
.attr("stroke","black")
.attr("stroke-width",2);

  结果是:

  太棒了!现在看的到啦!

  画直线必须的SVG属性是"x1","y1","x2","y2","stroke"以及"stroke-width"。

  注意-这里我们没有使用style方法,因为‘line’元素只是‘线’而已,没有“内部”可言,也就没有什么填充色之类的,在几何学上将,它是一维的。所以,我们在设置其样式的时候,就需要设置“stroke”颜色以及“stroke-width”。

使用D3.js画折线和多边形

  在基本图形中,我们还应该画“折线(polyline)”和“多边形(polygon)”。

  可以通过下面的代码创建SVG折线和多边形:

  折线 代码:

<svg width="50" height="50">
  <polyline fill="none" stroke="blue" stroke-width="2"
    points = "05,30
15,30
15,20
25,20
35,10 "/>
</svg>

  多边形 代码:

<svg width="50" height="50">
  <polygon fill="yellow" stroke="blue" stroke-width="2"
    points="05,30
    15,30
    25,20
    25,10
    35,10" />
</svg>

  通过上面这些圆形、长方形、直线的例子,你大概能猜到,要创建一个折线 和 多边形 图形,需要的属性是:“stroke”、“stroke-width”以及“points”。对于多边形Polygon还需要“fill”属性。

  然而,正如你所看到的,points属性包含了一个点(point)列表,其中节点的x,y值由逗号隔开,每对坐标值之间通过空格隔开。

  这样做很不美观。D3.js热衷于数据可视化以及美好的事物,d3.js的惯例是使用D3.svg.line()生成器来画折线和多边形。

  为了能够使用D3.js创建SVG基本图形折线(Polyline)和多边形(Polygon),我们将必须学习SVG Paths。

D3.js学习笔记(六)——SVG基础图形和D3.js的更多相关文章

  1. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  2. WebGL three.js学习笔记 加载外部模型以及Tween.js动画

    WebGL three.js学习笔记 加载外部模型以及Tween.js动画 本文的程序实现了加载外部stl格式的模型,以及学习了如何把加载的模型变为一个粒子系统,并使用Tween.js对该粒子系统进行 ...

  3. SVG基础图形和D3.js

    使用D3.js画一个SVG 的 圆 circle 可以使用如下代码创建: <svg width="50" height="50"> <circ ...

  4. Ext JS学习第八天 Ext基础之 认识Ext.js 和Ext-more.js

    此文来记录学习笔记: •认识Ext.js 和Ext-more.js •首先,我们要知道这2个js文件的作用,这俩个文件包含了Ext的一些基础定义.基本的属性和方法,我们要重点学习和深入底层代码进行研究 ...

  5. Java基础学习笔记六 Java基础语法之类和ArrayList

    引用数据类型 引用数据类型分类,提到引用数据类型(类),其实我们对它并不陌生,如使用过的Scanner类.Random类.我们可以把类的类型为两种: 第一种,Java为我们提供好的类,如Scanner ...

  6. Node.js学习笔记(六) --- Nodejs 的非阻塞 I/O、 异步、 事件驱动

    1. Nodejs 的单线程 非阻塞 I/O 事件驱动在 Java. PHP 或者.net 等服务器端语言中,会为每一个客户端连接创建一个新的线程.而每个线程需要耗费大约 2MB 内存.也就是说,理论 ...

  7. JS 学习笔记 (六) 函数式编程

    1.函数闭包 1.1 概述 JavaScript采用词法作用域,函数的执行依赖于变量作用域,这个作用域是在函数定义时决定的,而不是函数调用时决定的. 为了实现这种词法作用域,JavaScript函数对 ...

  8. Node.js学习笔记2(安装和配置Node.js)

            1.安装         windows下安装,在http://nodejs.org下载安装包进行安装即可.         linux下安装,使用yum或者下载源码进行编译.     ...

  9. WebGL three.js学习笔记 使用粒子系统模拟时空隧道(虫洞)

    WebGL three.js学习笔记 使用粒子系统模拟时空隧道 本例的运行结果如图: 时空隧道demo演示 Demo地址:https://nsytsqdtn.github.io/demo/sprite ...

随机推荐

  1. centos7 安装后,出现Please make your choice from above ['q' to quit | 'c' to continue | 'r' to refresh]

    PS:出现以上信息,是要求你阅读或者接收协议: Initial setup of CentOS Linux 7 (core)解决步骤如下: 1,输入[1],按Enter键阅读许可协议,2,输入[2], ...

  2. tomcat的配置和优化

    tomcat的内存使用配置,最大连接数配置. 如何修改配置呢,在/tomcat的/bin/下面有个脚本文件catailna.sh. 如果 windows 是bat设置tomcat的使用内存,其实就是设 ...

  3. 崩溃block

    [__NSGlobalBlock__ setHidden:]: unrecognized selector sent to instance 0x10dbb9090(null)注释掉 sethidde ...

  4. talib 中文文档(七):Overlap Studies Functions

    Overlap Studies Functions 重叠指标 BBANDS - Bollinger Bands 函数名:BBANDS 名称: 布林线指标 简介:其利用统计原理,求出股价的标准差及其信赖 ...

  5. 自动化工具构建vue项目

    其实之前对vue的话也有过一段时间的学习,博客园也是写了5篇vue的学习笔记.但是一直是通过CDN的方式在html文件头部引入vue.js,然后实例化vue对象绑定Dom,写组件写方法.就算是在实际项 ...

  6. Flask知识总汇

    Flask基础 Flask基础使用与配置 Flask路由系统与模板系统 Flask视图函数 Flask请求与响应 Flask的session操作 Flask中间件 Flask连接数据库 Flask使用 ...

  7. POJ1006——Biorhythms(中国剩余定理)

    Biorhythms Description人生来就有三个生理周期,分别为体力.感情和智力周期,它们的周期长度为23天.28天和33天.每一个周期中有一天是高峰.在高峰这天,人会在相应的方面表现出色. ...

  8. http webservice socket的区别

    1 数据传输方式1.1 socket传输的定义和其特点    所谓socket通常也称作"套接字",实现服务器和客户端之间的物理连接,并进行数据传输,主要有udp和tcp两个协议. ...

  9. Mysql 数据库系列

    阅读目录 第一篇:  数据库初识 第二篇:  库操作 第三篇:  存储引擎 第四篇:  表操作 第五篇:  数据操作 第六篇:  索引原理与慢查询优化 第七篇:  数据备份 pymysql模块 第八篇 ...

  10. 表单验证—html5新特性表单验证

    一.表单 <body> <section id="register"> <div><img src="images/logo.j ...