首先需要下载安装d3.js  :  yarn add d3

然后在组建中引入 :  import * as d3 from 'd3'

然后定义一个方法,在componentDidMount()这个钩子函数中调用即可。

然后如何绘制一个矢量图 :

 render() {
return (
<div id="drawSVG" ></div>
);
}

先定义一个id为drawSVG的div标签。然后写一个方法,来在这个div中绘制矢量图。

   oneMethod() { //定义一个方法
var width = ; //定义svg的宽度
var height = ; //定义svg的高度
var svg = d3.select("#drawSVG") //选择容器
.append('svg') //将svg放入容器里面
.attr("width", width) //设置svg的宽度
.attr("height", height) //设置svg的高度
.style("background-color", "red") //设置svg的背景颜色
.style("border-radius", "50%") //设置svg的圆角 svg.append("circle") //在<svg>中添加<circle>标签
.attr("cx", "200px") //设置圆形的x坐标
.attr("cy", "200px") //设置圆形的y坐标
.attr("r", "100px") //设置圆形的半径
.attr("fill", "yellow") //设置圆形的填充色
}

然后在componentDidMount()中调用。

  componentDidMount() {
this.oneMethod()
}

最后来看看会显示出什么样的矢量图行呢。。。

全部代码 :

 import React, { Component } from 'react';
import * as d3 from 'd3';
class Demo extends Component {
constructor(props) {
super(props);
this.state = {}
} componentDidMount() {
this.oneMethod()
} oneMethod() { //定义一个方法
var width = 400; //定义svg的宽度
var height = 400; //定义svg的高度
var svg = d3.select("#drawSVG") //选择容器
.append('svg') //将svg放入容器里面
.attr("width", width) //设置svg的宽度
.attr("height", height) //设置svg的高度
.style("background-color", "red") //设置svg的背景颜色
.style("border-radius", "50%") //设置svg的圆角 svg.append("circle") //在<svg>中添加<circle>标签
.attr("cx", "200px") //设置圆形的x坐标
.attr("cy", "200px") //设置圆形的y坐标
.attr("r", "100px") //设置圆形的半径
.attr("fill", "yellow") //设置圆形的填充色
} render() {
return (
<div id="drawSVG" ></div>
);
}
} export default Demo;

什么是选择集 : 

  d3.select和d3.selectAll返回的对象称为选择集(selection), 添加、删除、设定网页中的元素, 都得使用选择集.

详解select与selectAll:
  selsect : 返回匹配选择器的第一个元素
d3.select("body") //选择body元素
d3.select("#drawSVG") //选择id为drawSVG的元素
d3.select(".xxx") //选择class为xxx的第一个元素 selectAll: 返回匹配选择器的所有元素
d3.selectAll("p") //选择所有的p元素
d3.selectAll(".xxx") //选择class为xxx的所有元素
d3.selectAll("ul li") //选择ul中所有的li元素

 查看选择集的状态有三个函数 : 

 查看选择集的状态,有三个函数 :
selection.empty() : 如果选择集为空,则返回true。如果不为空,返回false;
selection.node() : 返回第一个非空元素,如果选择集为空,返回null;
selection.size() : 返回选择集中的元素个数;

举例子 :

 render() {
return (
<div id="drawSVG" >
<p>窗前明月光</p>
<p>疑是地上霜</p>
<p>举头望明月</p>
<p>低头思故乡</p>
</div>
);
}
  oneMethodAgain(){
var paragraphs = d3.selectAll("p")
console.log(paragraphs.empty()) //false
console.log(paragraphs.node()) //<p>窗前明月光</p>
console.log(paragraphs.size()) //
}

以上就是查看选择集的状态。

对于选择集如何添加、插入和删除元素 :

1  对于选择集 , 添加、插入和删除元素  :
2 selection.append(name) :
3 在选择集的末尾添加一个元素,name为元素名称。
4 selection.insert(name,[,before]) :
5 在选择集中的指定元素之前插入一个元素,name是被插入的元素名称,before是css选择器名称。
6 selection.remove() :
7 删除选择集中的元素。

 举例子 : 

  render() {
return (
<div id="drawSVG" >
<p>窗前明月光</p>
<p>疑是地上霜</p>
<p id="plane" >举头望明月</p>
<p>低头思故乡</p>
</div>
);
}

还是这些内容来举例 。

 oneMethodAgains() {
var body = d3.select("#drawSVG") //在id为drawSVG的div中的最末尾添加一个p元素
body.append("p")
.text("静夜思")//内容
.style("color", "red")//字体颜色 //在id为plane的p元素前添加一个p元素
body.insert("p", "#plane")
.text("~~~~") //内容
.style("color", "yellow") //字体颜色 //删除id为plane的元素
var plane = d3.select("#plane") plane.remove() }

显示效果分别为 :

如何设定和获取属性 : 

  

 设定和获取属性 :
selection.attr(name[,value]) :
设置或获取选择集的属性,name是属性名称,value是属性值。如果省略value,则返回当前的属性值。
selection.classed(name[,value]) :
设定或获取选择集的css类,name是类名,value是一个布尔值。表示是否开启。
d3.select("p")
.classed("xxx",true) //开启xxx类
.classed("sss",false) //不开启sss类
selection.style(name[,value[,priority]]) :
设定或获取选择集的样式,name是样式名,value是样式值;
selection.property(name[,value]) :
设定或获取选择集的属性,name是属性名,value是属性值。如果省略value,则返回属性名。
有部分属性不能用attr()设定和获取,最经典的是文本输入框的value属性,此属性不会再标签中显示。
selection.text([value]) :
设定或获取选择集的文本内容,如果省略value,则返回当前的文本内容。文本内容相当于DOM的innerText,不包括元素内部的标签。
selection.html([value]) :
设定或获取选择集的内部HTML内容,相当于DOM的innerHTML。包括元素内部的标签。

这里就不给大家举例子了,大家有时间可以自己试一下。

希望可以帮到大家~ 谢谢。

D3.js (v3)+react框架 基础部分之认识选择集和如何绘制一个矢量图的更多相关文章

  1. D3.js(v3)+react框架 基础部分之数据绑定及其工作过程与绑定顺序

    数据绑定: 将数据绑定到Dom上,是D3最大的特色.d3.select和d3.selectAll返回的元素的选择集.选择集上是没有数据的. 数据绑定就是使被选择元素里“含有”数据. 相关函数有两个: ...

  2. D3.js(v3)+react 制作 一个带坐标轴与比例尺的折线图

    本章使用路径生成器来绘制一个折线图.以中国和日本的GDP数据为例:   //数据 var dataList = [ { coountry : "china", gdp : [ [2 ...

  3. D3.js(v3)+react 制作 一个带坐标与比例尺的柱形图 (V3版本)

    现在用D3.js + react做一个带坐标轴和比例尺的柱形图.我已经尽力把代码全部注释上了,最后我也会把完整柱形图代码奉上.如果还有疑惑的,可以去翻看一下我之前介绍的方法,以下方法都有介绍到. 还有 ...

  4. D3.js(v3)+react 制作 一个带坐标与比例尺的散点图 (V3版本)

    上一章做了柱形图,https://www.cnblogs.com/littleSpill/p/10835041.html   这一章做散点图.   散点图(Scatter Chart),通常是一横一竖 ...

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

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

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

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

  7. 【 D3.js 入门系列 — 2 】 绑定数据和选择元素

    1. 如何绑定数据 D3 有一个很独特的功能:能将数据绑定到 DOM 上,也就是绑定到文档上.这么说可能不好理解,例如网页中有段落元素<p>,我们可以将整数 5 与 <p>绑定 ...

  8. 用 D3.js 画一个手机专利关系图, 看看苹果,三星,微软间的专利纠葛

    前言 本文灵感来源于Mike Bostock 的一个 demo 页面 原 demo 基于 D3.js v3 开发, 笔者将其使用 D3.js v5 进行重写, 并改为使用 ES6 语法. 源码: gi ...

  9. D3.js v5 Tutorials

    D3.js v5 Tutorials D3.js v5 教程 https://github.com/d3/d3/blob/master/API.md CHANGES https://github.co ...

随机推荐

  1. [转]order by 与索引

    ORDER BY 通常会有两种实现方法,一个是利用有序索引自动实现,也就是说利用有序索引的有序性就不再另做排序操作了.另一个是把结果选好之后再排序. 用有序索引这种,当然是最快的,不过有一些限制条件, ...

  2. oracle 替换字符 replace

    替换字符: select replace('xxyyzz','zz','') from dual >> xxyy   同时替换多个字符: select replace(replace('x ...

  3. 本地导入/导出远程oracle数据库

    1.导出数据库 exp 用户名/密码@远程服务器IP:数据端口号/实例名 file=存储dmp文件的路径 full=y; 2.导入数据库 imp 用户名/密码@远程服务器IP:数据库端口号/实例名 f ...

  4. elasticsearch-环境搭建

    1:下载并安装JDK 下载地址:jdk-8u91-windows-x64.exe 2:下载elasticsearch压缩包 下载地址:elasticsearch-2.3.0.zip 下载之后解压缩文件 ...

  5. i2c触摸屏驱动文件的实现

    转自:http://blog.chinaunix.net/uid-29507718-id-4314013.html Linux下I2C接口触摸屏驱动分析  分类: LINUX linux下触摸屏驱动的 ...

  6. php mysqli 链接数据库 CURD 增改查删

    <?php function println($msg) { echo "<br>"; echo $msg; } $mysql_server_name = &qu ...

  7. java se的那些细节

    局部变量:方法体内或语句块内,不能有修饰符 成员变量:与类的对象共存,可以有修饰符 类属性:与类共存,可以有修饰符 一.局部变量:必须先赋值,才能使用,如果不赋初值,则会报错,即没有默认的始使值,而基 ...

  8. day19(乱码解决方案)

    乱码的解决方案: 首先需要理解乱码的产生原因:无非就是编码格式的问题 1.服务器到浏览器 字节流传输时 产生乱码的原因: 1.浏览器打开方式不对(打开时 的方式为默认的方式,各个浏览器的方式都不同) ...

  9. _编程语言_C++_std

    正常使用 cout << "Count is "<<i<<endl; 含有std std::cout << "Count ...

  10. java基础-day28

    第05天 MySQL 今日内容介绍 u 数据库的概述 u MySQL和SQLyog的安装和使用 u SQL语句 第1章   数据库的概述 1.1  数据库的概述 1.1.1 概述 l  什么是数据库 ...