【D3使用教程】(1) 开始 | 加载数据

简介: 【D3使用教程】(1) 开始 | 加载数据

一、数据

(1)引言

可视化编程的语境下,数据保存在数字化文件中,一般是文本格式或二进制格式。当然,并不是只有文本内容才算数据,那些表示图像、音频、视频、数据库、流、模型、文档等一切比特和字节也是数据。

对于D3和浏览器可视化的角度来说,我们只讨论文本数据。即那些可以表现为数值或字符串的东西。如果你可以把数据保存到.txt纯文本文件,或者.csv逗号分隔值文件,或者.json文件,那么D3就能使用它。

用D3术语来说,数据必须绑定到页面中的元素上。形象地说,就是数据要附着在东西上。

数据可视化说到底就是把数据映射到图形,数据入而图形出。而映射的规则有你来定。例如,数值越大条形越长等。

在D3中,为了实现映射规则,需要把数据输入的值绑定到DOM中的元素上。

(2)绑定数据

那么,如何绑定?

D3中通过的selection.data()方法把数据绑定到DOM元素。但必须具备两个条件:

  • 数据
  • 选中的DOM元素

首先,加载数据。

(2.1)加载CSV数据。

CSV是逗号分隔的值得意思。其文件一般是这样的格式:

Food,Deliciousness
Apples,9
Green Beans,5
Egg Salad Sandwich,4
Cookies,10
Vegemite,0.2
Burrito,7

这个文件中每一行都有两个值,值与值用逗号隔开。第一行一般作为标头,充当每一“列”的列名。

在D3中可以通过以下函数来加载csv文件:

d3.csv(path,function(data){
   console.log(data);
});

从控制台面板中,我们可以看到数据保存在数组中,且有3个元素,每个元素都是一个对象。

需要注意

● CSV中每个值都是以字符串形式保存的,连数字都是!

这一点可能会影响后面的操作,因为你会把它当数值,但实际上它却是一个字符串。

d3.csv() 是一个异步方法。就是说,在它加载数据的同时,其他javascript代码会照样执行。同时D3中其他加载外部资源的方法也一样。

为了避免异步加载出错,通常我们可以增加一个error参数。如果加载文件遇到问题,Error中将包含Web服务器返回的错误信息,此时data是undefined.注意error作为参数需要放在第一位。

同样,加载json数据,有如下方法:

d3.json(path,function(json){
   console.log(json);
});

(3)怎样选择还不存在的元素?

**使用enter()函数。**当要创建新的绑定数据的元素,必须使用enter()。这个方法会分析当前选择的DOM元素和传给它的数据,如果数据值比对应的DOM元素多,就创建一个新的占位元素。然后把这个新占位元素的引用交给链中的下一个方法。

例如:

      let dataset = [4,19,15,20,25];
        d3.select("body").append("p").selectAll("p")
         .data(dataset)
         .enter()
         .append("p")
         .text(function(d) {return d;});

在连缀方法中,只要调用了data()方法,就可以随时创建一个接受d为输入的匿名函数。与当前元素对应,方法data()确保了每个d都会被赋予原始数据集中的一个值。如果不把d封装在匿名函数中,d就会没有值。

最后传入的是匿名函数。如果D3发现它是一个函数,就会调用它,同时将当前数据值d作为参数传进去。

任何情况下,没有那个函数,D3将无法把当前数据值传出来。此时,可怕的事就会发生-_->。

其中function(d){return d;} 这种函数叫作“匿名函数”,因为它没有名字。

相对而言,把函数保存在一个变量中,那个函数就是“命名函数”:

var doSomething = function() {//todo};

**注意,**使用D3过程中会写大量的匿名函数。匿名函数是访问个别数据值并计算动态属性的关键所在!

下一节中,我们会使用数据进入绘图阶段。


相关文章
|
前端开发 网络安全
layui如何实现添加数据时关闭页面层,并实时刷新表格数据?
layui如何实现添加数据时关闭页面层,并实时刷新表格数据?
|
人工智能 数据可视化 Java
ElasticSearch安装、插件介绍及Kibana的安装与使用详解
ElasticSearch安装、插件介绍及Kibana的安装与使用详解
ElasticSearch安装、插件介绍及Kibana的安装与使用详解
|
移动开发 小程序 Android开发
小程序webview组件嵌H5页面,安卓手机没有问题,苹果有部分页面不显示
小程序webview组件嵌H5页面,安卓手机没有问题,苹果有部分页面不显示
492 0
|
8月前
|
XML 语音技术 Android开发
Android中TextToSpeech的使用
本文介绍了在Android开发中使用TextToSpeech(TTS)实现语音合成的功能。通过实例代码展示了TTS的初始化、语言设置、语音播放及队列模式的选择,并提供了将语音保存为音频文件的方法。项目中包含一个简单的按钮触发朗读功能,适合初学者学习和实践。代码示例完整,涵盖Activity生命周期管理与XML布局设计。
548 4
|
缓存 关系型数据库 MySQL
高并发架构系列:数据库主从同步的 3 种方案
本文详解高并发场景下数据库主从同步的三种解决方案:数据主从同步、数据库半同步复制、数据库中间件同步和缓存记录写key同步,旨在帮助解决数据一致性问题。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
高并发架构系列:数据库主从同步的 3 种方案
|
监控 JavaScript 前端开发
使用 `defer` 属性异步加载 JavaScript
【10月更文挑战第24天】使用 `defer` 属性异步加载 JavaScript 是一种有效的提高页面性能和用户体验的方法。通过合理设置 `defer` 属性,可以在不影响页面渲染的情况下异步加载脚本,并确保脚本的执行顺序。在实际应用中,需要根据具体情况选择合适的加载方式,并注意处理可能出现的问题,以确保页面能够正常加载和执行。
级联选择器【简单了解】
级联选择器【简单了解】
475 0
|
API 图形学
U3D客户端框架之实现基于UnityWebRequest的Http服务 实现HttpCallBackArgs参数类、HttpRoutine访问器、HttpManager管理器
Unity3D 在2018版本中弃用了WWW请求,使用UnityWebRequest 进行网络请求,这个方法是为了满足今天的 HTTP 通信的需求,而且诞生的新类,相对于WWW这个方法,会更灵活一些,但是用起来却很不方便。
1089 0
U3D客户端框架之实现基于UnityWebRequest的Http服务 实现HttpCallBackArgs参数类、HttpRoutine访问器、HttpManager管理器
带你了解SMTP,POP3,IMAP协议
带你了解SMTP,POP3,IMAP协议
1704 0
|
SQL 关系型数据库 MySQL

热门文章

最新文章