d3.js入门教程2-在 d3.js中构建形状

d3.js是一个用于绘图的JavaScript 库。 它可以可视化展示任何类型的数据。 d3.js允许绘制形状,然后将各种形状构建一个图形。本文档描述了一些函数,可以更有效地从数据中绘制svg。

形状的添加

圆形的添加

在svg中绘制圆形。需要三个参数:分别代表圆心x位置的cx、圆心y位置的cy和半径的r。基础调用函数如下:

<circle style="fill: #69b3a2" stroke="black" cx=100 cy=100 r=40></circle>

现在,让我们用javascript来实现它,这基本上是相同的过程。

    <!-- 直接绘图 -->
<svg>
<circle style="fill: #69b3a2" stroke="black" cx=100 cy=100 r=40></circle>
</svg> <!-- 加载d3 -->
<script src="https://d3js.org/d3.v4.js"></script> <!-- 添加一个空的svg图片 -->
<svg id="circle"></svg>
<script>
// 创建svg元素
var svg = d3.select("#circle").append("svg").attr("width", 200).attr("height", 200) // 设置属性
// stroke设置轮廓颜色
svg.append('circle').attr('cx', 100).attr('cy', 100).attr('r', 30).attr('stroke', 'black').attr('fill', 'red')
</script>

其中蓝色圆是由html绘图元素创建,红色圆是通过js创建

矩形的添加

在svg中绘制矩形,四个参数是必需的:x,y,width和height。

<rect style="fill: #69b3a2" stroke="black" x=10 y=100, width=300 height=40></rect>

现在,让我们用javascript来实现它,这基本上是相同的过程。

    <!-- 直接绘图 -->
<svg>
<rect style="fill: #69b3a2" stroke="black" x=10 y=100, width=300 height=40></rect>
</svg> <!-- 加载d3 -->
<script src="https://d3js.org/d3.v4.js"></script> <!-- 添加一个空的svg图片 -->
<svg id="rect"></svg> <script>
// 创建svg元素
var svg = d3.select("#rect").append("svg").attr("width", 800).attr("height", 200) // 设置属性
svg.append('rect')
.attr('x', 10)
.attr('y', 120)
.attr('width', 600)
.attr('height', 40)
.attr('stroke', 'black')
.attr('fill', 'red');

其中蓝色矩形是由html绘图元素创建,红色矩形是通过js创建

线段的添加

在svg中绘制线段,四个参数是必需的:x0,y0,x1和y1(线段的两个顶点坐标)。

<line stroke="#69b3a2" x0=10 y0=10, x1=500 y1=100></line>

现在,让我们用javascript来实现它,这基本上是相同的过程。

    <!-- 直接绘图 -->
<svg>
<line stroke="#69b3a2" x0=10 y0=10, x1=300 y1=100></line>
</svg> <!-- 加载d3 -->
<script src="https://d3js.org/d3.v4.js"></script> <!-- 添加一个空的svg图片 -->
<svg id="segment"></svg> <script> // 创建svg元素
var svg = d3.select("#segment").append("svg").attr("width", 800).attr("height", 200) // 设置属性
svg.append('line')
.attr('x1', 10)
.attr('y1', 10)
.attr('x2', 700)
.attr('y2', 100)
.attr('stroke', 'red')
</script>

其中蓝色线段是由html绘图元素创建,红色线段是通过js创建

文本的添加

在svg中添加文本,需要三个参数:x,y和text。

<text stroke="#69b3a2" style="font-size: 19px" x=100 y=50>I'm a piece of text</text>

现在,让我们用javascript来实现它,这基本上是相同的过程。

    <!-- 直接绘图 -->
<svg>
<text stroke="#69b3a2" style="font-size: 19px" x=100 y=80>I'm a piece of text</text>
</svg> <!-- 加载d3 -->
<script src="https://d3js.org/d3.v4.js"></script> <!-- 添加一个空的svg图片 -->
<svg id="text"></svg> <script> // 创建svg元素
var svg = d3.select("#text").append("svg").attr("width", 800).attr("height", 200) //设置属性
svg.append('text')
.attr('x', 60)
.attr('y', 50)
.attr('stroke', 'red')
.style("font-size", 19)
.text("I'm another piece of text")
</script>

其中蓝色文本是由html绘图元素创建,红色文本是通过js创建

折线的添加

在svg添加文本,参数比较复杂。具体如下:

<path style="fill: none" stroke="black" d="M0 20 L150 150 L300 100 L450 20 L600 130"></path>

幸运的是,d3.js提供可以更有效地绘制折线的函数

    <!-- 直接绘图 -->
<svg height=200 width=600>
<path style="fill: none" stroke="#69b3a2" d="M0 20 L150 150 L300 100 L450 20 L600 130"></path>
</svg> <!-- 加载d3 -->
<script src="https://d3js.org/d3.v4.js"></script> <!-- 添加一个空的svg图片 -->
<svg id="line" height=200 width=600></svg> <script> // 创建svg元素
var svg = d3.select("#line").append("svg") // 创建数据,多个点连接成折线
var data = [{ x: 0, y: 20 }, { x: 150, y: 150 }, { x: 300, y: 100 }, { x: 450, y: 20 }, { x: 600, y: 130 }] // 创建连接函数
var lineFunc = d3.line()
.x(function (d) { return d.x })
.y(function (d) { return d.y }) // 添加元素
svg.append('path')
.attr('d', lineFunc(data))
.attr('stroke', 'red')
.attr('fill', 'none');
</script>

其中蓝色线条是由html绘图元素创建,红色线条是通过js创建

当然可以设置线条类型,如下所示


<!-- 加载d3 -->
<script src="https://d3js.org/d3.v4.js"></script> <!-- 添加一个空的svg图片 -->
<svg id="curve" height=300 width=600></svg> <script> // 创建数据
var data = [{ x: 0, y: 20 }, { x: 150, y: 150 }, { x: 300, y: 100 }, { x: 450, y: 20 }, { x: 600, y: 130 }] // 创建svg元素
var svg = d3.select("#curve").append("svg").attr("width", 1800).attr("height", 200) // 创建辅助函数
var curveFunc = d3.line()
// 设置线条类型,具体设置参考官方文档,可以尝试curveStep.
.curve(d3.curveBasis)
.x(function (d) { return d.x })
.y(function (d) { return d.y }) svg.append('path')
.attr('d', curveFunc(data))
.attr('stroke', 'black')
.attr('fill', 'none'); </script>

区域的添加

html的svg标签原生语法画区域很麻烦,还是用js容易。原生代码如下所示:

<path style="fill: #69b3a2" stroke="black" d="M0 200 L0 20 L150 150 L300 100 L450 20 L600 130 L600 200"></path>

js代码如下:


<!-- 原生绘图 -->
<svg height=300 width=800>
<path style="fill: #69b3a2" stroke="black" d="M0 200 L0 20 L150 150 L300 100 L450 20 L600 130 L600 200"></path>
</svg> <!-- 加载d3 -->
<script src="https://d3js.org/d3.v4.js"></script> <!-- 添加一个空的svg图片 -->
<svg id="area" height=300 width=800></svg> <script> // 创建数据
var data = [{ x: 0, y: 20 }, { x: 150, y: 150 }, { x: 300, y: 100 }, { x: 450, y: 20 }, { x: 600, y: 130 }] // 创建svg元素
var svg = d3.select("#area").append("svg") // 创建辅助函数
var curveFunc = d3.area()
.x(function (d) { return d.x })
.y1(function (d) { return d.y }) // 区域上边界坐标
.y0(200) // 区域下边界坐标 // 添加属性
svg.append('path')
.attr('d', curveFunc(data))
.attr('stroke', 'black')
.attr('fill', 'red'); </script>

圆弧的添加

圆弧的添加也是一样,js最好。原生代码如下:

<path style="fill: #69b3a2" stroke="black" transform="translate(400,200)" d="M0,149 A150,150,0,0,1,-0.47,-149.9 L-0.3,-99.9 A100,100,0,0,0,0.15,99.9Z"></path>

现在,让我们使用d3.arc()辅助函数来绘制相同类型的形状。我们需要提供4个参数:innerRadius、outerRadius、startAngle、endAngle


<!-- 原生绘图 -->
<svg height=400 width=400>
<path style="fill: #69b3a2" stroke="black" transform="translate(400,200)"
d="M0,149 A150,150,0,0,1,-0.47,-149.9 L-0.3,-99.9 A100,100,0,0,0,0.15,99.9Z"></path>
</svg> <!-- 加载d3 -->
<script src="https://d3js.org/d3.v4.js"></script> <!-- 添加一个空的svg图片 -->
<svg id="arc" height=400 width=400></svg> <script>
// 创建svg元素
var svg = d3.select("#arc").append("svg")
// 添加弧形
svg
.append("path")
.attr("transform", "translate(400,100)") // 平移距离
.attr("d", d3.arc()
.innerRadius(100) // 内圈半径
.outerRadius(150) // 外圈半径
.startAngle(3.14) // 开始角度(弧度),最下方为3.14
.endAngle(3.14 * 1.6) // 结束角度(弧度)
)
.attr('stroke', 'black')
.attr('fill', 'red');
</script>

其中蓝色圆弧是由html绘图元素创建,红色圆弧是通过js创建

参考

[数据与分析可视化] D3入门教程2-在d3中构建形状的更多相关文章

  1. [数据与分析可视化] D3入门教程3-d3中的数据操作

    d3.js入门教程3-d3.js中的数据操作 文章目录 d3.js入门教程3-d3.js中的数据操作 数学操作 对象和数组 过滤Filtering 排序Sorting 映射group 循环loop 重 ...

  2. [数据与分析可视化] D3入门教程1-d3基础知识

    d3.js入门教程1-d3基础知识 文章目录 d3.js入门教程1-d3基础知识 1 HTML介绍 1.1 什么是HTML? 1.2 自定义文档样式CSS 1.3 构建svg图形 2 d3绘图入门 2 ...

  3. Wireshark数据包分析(一)——使用入门

    Wireshark简介: Wireshark是一款最流行和强大的开源数据包抓包与分析工具,没有之一.在SecTools安全社区里颇受欢迎,曾一度超越Metasploit.Nessus.Aircrack ...

  4. DotNetBrowser入门教程(更新完善中)

    DotNetBrowser 希望实现的目标:桌面软件可以完美运行Html5,内置支持MVC与WebSocket的微型服务器. 基于.Net 4.0开发.开发环境:VS2017,运行环境支持Window ...

  5. Entity Framework入门教程(3)---EF中的上下文简介

    1.DbContext(上下文类) 在DbFirst模式中,我们添加一个EDM(Entity Data Model)后会自动生成一个.edmx文件,这个文件中包含一个继承DbContext类的上下文实 ...

  6. Entity Framework入门教程(11)---EF6中的异步查询和异步保存

    EF6中的异步查询和异步保存 在.NET4.5中介绍了异步操作,异步操作在EF中也很有用,在EF6中我们可以使用DbContext的实例进行异步查询和异步保存. 1.异步查询 下边是一个通过L2E语法 ...

  7. Entity Framework入门教程(13)---EF中的高并发

    EF中的高并发 这里只介绍EF6中database-first开发方案的高并发解决方案,code-first开发方案中的高并发会在以后的EF CodeFirst系列中介绍. EF默认支持乐观并发:我们 ...

  8. WPF入门教程系列十七——WPF中的数据绑定(三)

    四. XML数据绑定 这次我们来学习新的绑定知识,XML数据绑定.XmlDataProvider 用来绑定 XML 数据,该XML数据可以是嵌入.Xmal文件的 XmlDataProvider 标记中 ...

  9. Unix/Linux环境C编程入门教程(35) 编程管理系统中的组

     组管理相关函数介绍 相关函数 getgid,setgid,setregid 表头文件 #include<unistd.h> #include<sys/types.h> 定 ...

随机推荐

  1. activeMq不能被主机访问的问题

    环境说明 主机:mac 虚拟机:VirtualBox 虚拟系统:Centos6.5 问题:虚拟机启动了 activemq. 也关闭了防火墙,但是在主机访问web界面,http://192.168.1. ...

  2. win10桌面右键卡顿卡死解决方法

    win+R,打开命令行 输入services.msc 找到NADIA Display Container LS,将其由自动改为禁用,解决问题. PS:网上有些改注册表的方法,确实可以治标,但是大家都应 ...

  3. python关于Django搭建简单博客项目(详解一)

    上一篇我们说了如何搭建简易博客网站,下面我们来进行详细解答.本文没有特定顺序,请结合上一篇和源代码参照学习. 相关源代码和解析请参看:https://github.com/Cheng0829/mysi ...

  4. 微信抢红包小技巧(python模拟100万次)

    之前,在网上看到一篇文章,说多人抢红包时,微信红包金额的分配规则是0.01元到当前剩余金额平均数的2倍(最后一个人金额为当前剩下的所有金额),所以写了一个python程序,模拟量一百万次,分析了一下抢 ...

  5. 基于.NetCore开发博客项目 StarBlog - (19) Markdown渲染方案探索

    前言 笔者认为,一个博客网站,最核心的是阅读体验. 在开发StarBlog的过程中,最耗时的恰恰也是文章的展示部分功能. 最开始还没研究出来如何很好的使用后端渲染,所以只能先用Editor.md组件做 ...

  6. 十、RHEL Podman命令

    Podman介绍 Podman 是一个开源的容器运行时项目,可在大多数 Linux 平台上使用.Podman 提供与 Docker 非常相似的功能.正如前面提到的那样,它不需要在你的系统上运行任何守护 ...

  7. 二十、Pod的存储之Configmap

    Pod 的存储之Configmap 一.Configmap介绍 ​ConfigMap 功能在 Kubernetes1.2 版本中引入,许多应用程序会从配置文件.命令行参数或环境变量中读取配置信息.Co ...

  8. Spring Core rce漏洞分析(CVE-2022-22965)

    漏洞描述: Springmvc框架参数绑定功能,绑定了请求里的参数造成变量注入,攻击者可以实现任意文件写入,漏洞点spring-beans包中. 漏洞编号: CVE-2022-22965 影响范围: ...

  9. .NET性能优化-是时候换个序列化协议了

    计算机单机性能一直受到摩尔定律的约束,随着移动互联网的兴趣,单机性能不足的瓶颈越来越明显,制约着整个行业的发展.不过我们虽然不能无止境的纵向扩容系统,但是我们可以分布式.横向的扩容系统,这听起来非常的 ...

  10. LoadRunner11脚本小技能之同步/异步接口分离+批量替换请求头

    最近在公司又进行了一次LoadRunner11性能测试,技能又get了一点,继续Mark起来!!! 一.异步/同步接口分离 之前在另一篇博文中有提到"事务拆分"的小节,即一个htm ...