Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >D3.js 满足你对数据可视化的一切幻想

D3.js 满足你对数据可视化的一切幻想

作者头像
企鹅号小编
发布于 2018-01-08 12:10:33
发布于 2018-01-08 12:10:33
4.4K1
举报
文章被收录于专栏:企鹅号快讯企鹅号快讯

D3.js

D3的全称是Data-Driven Documents(数据驱动的文档),是一个用来做数据可视化的JavaScript函数库,而JavaScript文件的后缀通常为.js,所以D3被称为D3.js。

对D3来说,柱形图、散点图、折线图、饼图、弦图、力导向图、树状图等等都不在话下。总之,只要你愿意写代码,D3.js可以满足你对数据可视化的一切幻想。

今天我们以弦图为例进行介绍。

弦图

弦图主要用于表示两个节点之间的联系。两点之间的连线表示二者具有联系,线的粗细表示权重。

下面是之前做的一张电影类型相关性的弦图。

弦图

准备工作

D3是在HTML和CSS文件中编写代码,在浏览器中显示结果。

HTML文件用来描述内容,CSS文件用来定义内容的样式。定义样式可以单独写在外部CSS文件中,在HTML中用引用;也可以直接写在HTML文件中,在

body {

font: 20px sans-serif;

} //定义字号字体

.group-tick line {

stroke:#000000;

} //定义描边

.ribbons {

fill-opacity: 0.67;

} //定义填充不透明度

代码用来定义样式。

CSS选择器有多种类型。

元素选择器以HTML元素的标签作为名称,如:

body { font: 20px sans-serif;}

则所有主体内容的字号和字体都这样显示。

类选择器是在选择器名称前加一个点(.),如:

.ribbons { fill-opacity: 0.67;}

之后需要应用的话,在元素标签中添加一个class属性即可,后续我们会写到。

另外还有选择器分组、ID选择器、派生选择器,由于这次代码未涉及,暂不赘述。

//定义图形大小

SVG指可缩放矢量图形,绝大部分浏览器都支持,可以利用标签将形状嵌入HTML中。

var leixing = [ "喜剧" , "剧情" , "动作" , "冒险" , "爱情", "惊悚" , "动画" , "奇幻" , "悬疑" , "科幻"]; //定义类型标签

var matrix = [

[77, 108, 88,110,245,12,110,50,25,17],

[108, 102, 117,37,180,67,13,27,79,20],

[88,117,9,133,54,103,22,59,43,96],

[110, 37, 133,3,21,32,141,98,16,60],

[245, 180, 54,21,59,15,3,33,33,7],

[12, 67, 103,32,15,18,1,13,111,33],

[110, 13, 22,141,3,1,12,60,5,12],

[50, 27, 59,98,33,13,60,0,5,13],

[25, 79, 43,16,33,111,5,5,1,12],

[17, 20, 96,60,7,33,12,13,12,0]

]; //输入类型相关性数据

由于统计的是10种电影类型之间的交叉关系,所以是一个对称矩阵。

所以如果你也想画一个10个元素的弦图,也可以不看下边的内容,直接复制代码,修改这两段数据即可。

var svg = d3.select("svg"),

width = +svg.attr("width"),

height = +svg.attr("height"),

outerRadius = Math.min(width, height) * 0.5 - 40,

innerRadius = outerRadius - 40; //定义外部弦和内部弦的大小

绘制外部弦

var chord = d3.chord()

.padAngle(0.05) //设置外部弦间的角填充,也就是弦之间的间距

.sortSubgroups(d3.descending);//设置用于子分组的比较器

var arc = d3.arc()

.innerRadius(innerRadius)

.outerRadius(outerRadius);

var ribbon = d3.ribbon()

.radius(innerRadius);

var color = d3.scaleOrdinal()

.domain(d3.range(4))

.range(["#8EC21E","#C3D968","#009DE6","#7CCDF3","#E51573","#EC799F","#F39820","#FCD35A","#A0A0A2","#C9C9CA"]); //设置颜色(和元素标签数量相等即可,在本例中为10)

var g = svg.append("g")

.attr("transform", "translate(" + width / 2 + "," + height / 2 + ")")

.datum(chord(matrix));

var group = g.append("g")

.attr("class", "groups")

.selectAll("g")

.data(function(chords) { return chords.groups; })

.enter().append("g");

group.append("path")

.style("fill", function(d) { return color(d.index); })

.attr("d", arc);

写到这里,在代码末尾包含结束符“”的情况下,可以运行出以下结果。

添加标签

group.append("text")

.each(function(d,i) { d.angle = (d.startAngle + d.endAngle) / 2;d.name = leixing[i]; })

.attr("dy", ".35em")

.attr("transform", function(d){

return "rotate(" + ( d.angle * 180 / Math.PI ) + ")" +"translate(0,"+ -1.0*(outerRadius+10) +")" +( ( d.angle > Math.PI*3/4 && d.angle < Math.PI*5/4 ) ? "rotate(180)" : "");})

.text(function(d) { return d.name; });

var groupTick = group.selectAll(".group-tick")

.data(function(d) { return groupTicks(d, 1e3); })

.enter().append("g")

.attr("class", "group-tick")

.attr("transform", function(d) { return "rotate(" + (d.angle * 180 / Math.PI - 90) + ") translate(" + outerRadius + ",0)"; });

写到这里,在代码末尾包含结束符“”的情况下,可以运行出以下结果。

绘制内部弦

g.append("g")

.attr("class", "ribbons")

.selectAll("path")

.data(function(chords) { return chords; })

.enter().append("path")

.attr("d", ribbon)

.style("fill", function(d) { return color(d.target.index); })

function groupTicks(d, step) {

var k = (d.endAngle - d.startAngle) / d.value;

return d3.range(0, d.value, step).map(function(value) {

return ;

});

}

//不要忘记最后的结束标签

本文来自企鹅号 - 荼蘼Studio媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文来自企鹅号 - 荼蘼Studio媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
1 条评论
热度
最新
能不能给源码,少东西呀,出不来
能不能给源码,少东西呀,出不来
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
D3.js实战:数据可视化高级技巧实例应用
首先,我们需要一个HTML文件来引入D3.js库,并准备一个画布来放置我们的图表。
天涯学馆
2024/05/23
3430
D3库实践笔记之几类特定图表与布局 |可视化系列37
布局(Layout)可以看成是D3对图形元素的一种排布方式,在绘制柱状图时,是在横平竖直的直角坐标系下,确定矩形的左上角坐标,就可以画出随着高度变化的一系列柱子,以体现数据值的差异,而如果要画饼图呢,有一列数据[30,10,6],映射到饼图的不同楔形里,是一个个手动计算角度和初始位置么?根据图形语法,只需要将坐标系变成极坐标,一系列数据很容易对应为角度。
蛰虫始航
2020/11/25
2K0
D3库实践笔记之几类特定图表与布局 |可视化系列37
如何用d3生成一个饼图
initPieChart: function (el, data) { // var data = [2, 4, 8, 10]; // 得到容器的尺寸 var width = el.width(), height = el.height(); var radius = Math.min(width, height) / 3; // 清空容器 d3.select(el[0]) .select("svg") .remove(
frontoldman
2019/09/03
7600
「数据可视化库王者」D3.js 极速上手到Vue应用
D3近年来一直是 JavaScript最重要的数据可视化库之一,在创建者 MikeBostock的维护下,前景依然无量,至少现在没有能打的:
前端劝退师
2019/08/16
9K0
「数据可视化库王者」D3.js 极速上手到Vue应用
手把手带你上手D3.js数据可视化系列(三)手把手带你上手D3.js数据可视化系列(三)
本系列 D3.js 数据可视化文章是古柳按照自己想写的逻辑来写的,可能和网上的教程都不太一样,至于会写多少篇、写成什么样,古柳也完全心里没数,虽然是奔着初学者也能轻松看懂的目标去的,但真的大家看完觉得有什么感受,古柳也不清楚,所以希望大家多多反馈,后续文章能改进的也继续改进,并且有机会的话基于这个系列再出个视频教程,但那是后话了。
古柳_DesertsX
2021/12/08
2.5K0
手把手带你上手D3.js数据可视化系列(三)手把手带你上手D3.js数据可视化系列(三)
使用JavaScript和D3.js实现数据可视化
D3.js是一个JavaScript库。它的全称是Data-Driven Documents(数据驱动文档),并且它被称为一个互动和动态的数据可视化库网络。2011年2月首次发布,在撰写本文时,最新的稳定版本是4.4版本,并且不断更新。D3利用可缩放矢量图形或SVG格式,允许您渲染可放大或缩小的形状,线条和填充,而不会降低质量。本教程将指导您使用JavaScript D3库创建条形图。
独木桥先生
2018/08/09
22.2K0
使用JavaScript和D3.js实现数据可视化
【D3.js - v5.x】(6)绘制树状图 | 层级布局 | 附完整代码
根据指定的层次结构数据构造一个根节点。指定的数据 data 必须为一个表示根节点的对象。比如:
前端修罗场
2023/10/07
2.2K0
【D3.js - v5.x】(6)绘制树状图 | 层级布局 | 附完整代码
手把手带你上手D3.js数据可视化系列(一)手把手带你上手D3.js数据可视化系列(一)
上一篇文章「安利一些不错的D3.js资源 - 牛衣古柳 2021.06.29」的反响还不错,记得有新群友说是主管推给她文章才加过来的,也是很神奇。
古柳_DesertsX
2021/12/08
4.7K0
手把手带你上手D3.js数据可视化系列(一)手把手带你上手D3.js数据可视化系列(一)
D3旭日图_日新图
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/09
1.2K0
D3旭日图_日新图
JavaScript进行数据可视化:D3.js入门
在数据驱动的世界中,数据可视化是理解和传达数据信息的重要手段。D3.js是一个强大的JavaScript库,它允许开发者将数据转换为可交互的图形和图表。本文将为您介绍D3.js的基本概念、特点以及如何入门使用它进行数据可视化。
iwhao
2024/08/13
3.1K0
数据可视化工具d3_前端3d可视化
近年来,可视化越来越流行,许多报刊杂志、门户网站、新闻媒体都大量使用可视化技术,使得复杂的数据和文字变得十分容易理解,有一句谚语“一张图片价值于一千个字”。D3 正是数据可视化工具中的佼佼者,基于 JavaScript 开发,项目托管于 GitHub。从 D3诞生以来,不断受到好评,在 GitHub 上的项目仓库排行榜也不断上升。可视化越来越流行,许多报刊杂志、门户网站、新闻、媒体都大量使用可视化技术,使得复杂的数据和文字变得十分容易理解,有一句谚语“一张图片价值于一千个字”,的确是名副其实。各种数据可视化工具也如井喷式地发展,D3 正是其中的佼佼者。D3 的全称是(Data-Driven Documents),顾名思义可以知道是一个被数据驱动的文档。听名字有点抽象,说简单一点,其实就是一个 JavaScript 的函数库,主要是用来做数据可视化。
全栈程序员站长
2022/11/10
13.1K0
数据可视化工具d3_前端3d可视化
手把手带你上手D3.js数据可视化系列(二)手把手带你上手D3.js数据可视化系列(二)
本系列配套代码和用到的数据都会开源到这个仓库,欢迎大家 Star,https://github.com/DesertsX/d3-tutorial
古柳_DesertsX
2021/12/08
3.1K0
手把手带你上手D3.js数据可视化系列(二)手把手带你上手D3.js数据可视化系列(二)
【D3.js - v5.x】(5)绘制力导向图 | 附完整代码
在二维或三维空间里配置节点,节点之间用线连接,称为连线。各连线的长度几乎相等,且尽可能不相交。
前端修罗场
2023/10/07
1K0
【D3.js - v5.x】(5)绘制力导向图 | 附完整代码
知识图谱可视化前奏之d3.js
0.说在前面1.d3.js初识2.绘制完整的柱形图3.让图表动起来4.浅析Update、Enter、Exit5.交互式操作6.作者的话
公众号guangcity
2019/09/20
13.5K0
知识图谱可视化前奏之d3.js
AngularJS in Action读书笔记5(实战篇)——在directive中引入D3饼状图显示
前言:   "宁肯像种子一样等待    也不愿像疲惫的陀螺    旋转得那样勉强"   这是前几天在查资料无意间看到的一位园友的签名,看完后又读了两遍,觉得很有味道。后来一寻根究底才知这是出资大诗人汪国真之口,出处《她》。且抛开上下文,单从这短短几句,正恰如其分的折射出有一群人,他们穿着不那么fashion,言辞不那么犀利,但是内心某一块地方像是躁动的火山,拥有无尽的动力和激情,矢志不渝种子般投身到技术研究和心得分享当中。   或许每一次的生长都是那么悄无声息,但是无数次的坚持只是为了破土那日让别人看到坚持
JackieZheng
2018/01/16
2.4K0
AngularJS in Action读书笔记5(实战篇)——在directive中引入D3饼状图显示
D3.js库-6-比例尺
比例尺在D3中是一个非常实用的工具,可以这样理解比例尺:\color{red}{一种一一映射}的关系,从domain映射到range。因为在建立比例尺的过程中会经常使用到两个函数:domain()和range()。本文中介绍两种常用的比例尺
皮大大
2021/03/01
14.7K0
D3.js库-6-比例尺
D3.js仪表盘的实现
细看上面的动态效果图,可以发现: 一个值变换到一个新的值时,是一个渐变的过程; 圆弧末尾有一个竖线,作为仪表盘的指针,在仪表盘数值变化时,有一个弹性的动画效果。 一开始,我是用Echarts来实现仪表
IT架构圈
2018/06/01
7.8K0
基于D3.js实现分类多标签的Tree型结构可视化
今天新来的实习生需要对部分分类文本进行多标签的检测,即根据已构建好的一、二级标签Excel文档,对众包平台人工标注的数据以及机器标注的数据进行评测。
用户1332428
2018/11/30
1.6K0
基于D3.js实现分类多标签的Tree型结构可视化
【D3使用教程】(5) 动态更新与过渡动画
数据总是在变化的,那么我们要如何将变化的数据反映到图表上呢? 在D3中,这些变化通过更新进行处理。而过渡通过使用动画用于处理视觉上的展示。
前端修罗场
2023/10/07
5610
【D3使用教程】(5) 动态更新与过渡动画
前端框架与库-D3.js数据可视化基础
在现代Web开发中,数据可视化已成为展示复杂数据集的关键技术之一。D3.js(Data-Driven Documents)是一个强大的JavaScript库,用于创建动态、交互式的可视化图表。无论是简单的条形图还是复杂的地理热力图,D3.js都能提供灵活且深度的控制。本文旨在为初学者介绍D3.js的基础知识,探讨一些常见的问题及易错点,并提供解决方案和代码示例。
Jimaks
2024/07/21
7070
推荐阅读
相关推荐
D3.js实战:数据可视化高级技巧实例应用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档