d3(二)

本文介绍D3.js中的数据绑定方法,并演示如何利用数据驱动文档生成元素及设置样式。通过实例展示了如何使用匿名函数处理数据,并实现条件样式设置。

原文链接 http://alignedleft.com/tutorials/d3/

应该是这本书Interactive Data Visualization for the Web

解答我很多关于d3机理的困惑



然后是07 Using your data



1、Using your data

代码

var dataset = [ 5, 10, 15, 20, 25 ];

d3.select("body").selectAll("p")
    .data(dataset)
    .enter()
    .append("p")
    .text(function(d){ return d; });
和06的代码比仅仅最后一行代码换了
 


这里令人困惑的是function(d)的参数d。只要在链条上使用了 data()函数,之后任何时候都可以创建一个把d作为输入的无名函数。 data()函数会确保d的值被设置成原有dataset中对应的值,给予当前最近的元素。

当前元素的值会随着D3循环每个元素而变化。举个例子:当循环到第3次,我们的代码会创建第3个p标签,而d将会对应dataset中的第3个值(dataset[2])。所以第3个p的text获得赋值15.



2、数据必须被持有

这个参数d只能通过无名函数传参的形式获得,此外的形式是无效的,比如

.text("I can count up to " + d);

这样行不通。

这样规定语法的原因是text()attr(),和许多其他方法会采用一个函数作为一个参数

比如,text() 即可以使用一个静态字符文本作文参数:

.text("someString")
也可以使用一个函数:
.text(someFunction())

或者一个匿名函数本事也可以是一个参数,比如:

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

Above, you are defining an anonymous function. If D3 sees a function there, it willcall that function, while handing off the current datum d as the function’s argument. Without the function in place, D3 can’t know to whom it should hand off the argument d.

At first, this may seem silly and like a lot of extra work to just get at d, but the value of this approach will become clear as we work on more complex pieces.

在前面,你定义了一个匿名函数。如果D3看到那里有一个函数,它会调用那个函数,同时传递了当前的数据d作为函数的参数。如果那里没有函数。D3将不知道把参数d传给谁.

3、对于Text更进一步研究

当我们可以使用D3的方法(比如attr() 和 style())独立的设置HTML和CSS属性的时候,事情变得越来越好玩了。

比如,在我们代码最后一行添加代码

.style("color", "red");
效果图:

所有的问题都变红了,很好的表换。更重要的是,我们可以使用一个自定义的函数来设定文字颜色,仅仅当数据超过一定阀值时才会变红。因而,我们重写最后一行代码,使用如下函数
.style("color", function(d) {
    if (d > 15) {   //Threshold of 15
        return "red";
    } else {
        return "black";
    }
});

效果图:


我们可以看到前3行是黑的,但是一旦超过规定的阀值15,text变红。

下一讲,我们会使用attr()style()来操作divs,产生一个简单地条形图----我们第一个可视化产品!







08-26
<think>我们正在讨论D3.js,这是一个用于数据可视化的JavaScript库。根据用户的问题,他们想了解D3.js的功能、使用指南和开发资源。我们将结合提供的引用内容来回答。 首先,从引用[1]中我们知道D3.js是一个功能强大的JavaScript库,特别适用于数据可视化,它允许开发者根据数据动态操作DOM元素,创建交互式的图表和图形。引用[2]提到D3.js被广泛应用于商业分析、科学研究、网络可视化等多个领域。引用[3]则展示了D3.js如何操作SVG元素,例如创建画布和圆形。 因此,我们将围绕以下方面组织回答: 1. D3.js的功能 2. D3.js的使用指南(包括核心概念和基本步骤) 3. 开发资源(包括模板和教程) 注意:在回答中,我们会自然地添加引用标识,例如在介绍功能时引用[1][2][3]。</think>### D3.js 功能、使用指南与开发资源 D3.js(Data-Driven Documents)是一个基于Web标准(SVG、Canvas、HTML5)的JavaScript数据可视化库,通过数据驱动DOM操作实现动态图形。其核心功能和应用如下: --- #### **一、核心功能** 1. **数据驱动图形** - 将数据绑定到DOM元素(如SVG图形),自动根据数据变化更新可视化效果[^1]。 - 示例:动态生成柱状图、折线图、散点图等。 2. **强大的数据处理能力** - 内置数据转换方法(如比例尺 `d3.scaleLinear()`、布局算法 `d3.forceSimulation()`)。 - 支持CSV、JSON、XML等数据格式解析。 3. **交互式操作** - 支持事件监听(缩放、拖拽、悬停),实现用户与图形的实时交互[^3]。 - 示例:地图点击高亮、数据筛选动态更新。 4. **跨平台兼容性** - 基于Web标准(SVG/Canvas),适配现代浏览器,无需插件[^2]。 --- #### **、使用指南** ##### **1. 基础步骤** ```javascript // 步骤1:引入D3.js库 <script src="https://d3js.org/d3.v7.min.js"></script> // 步骤2:创建SVG画布 const svg = d3.select("body") .append("svg") .attr("width", 500) .attr("height", 500); // 步骤3:绑定数据并绘制图形 const circles = svg.selectAll("circle") .data([10, 20, 30, 40]) // 绑定数据 .enter() .append("circle") .attr("cx", (d, i) => 50 + i * 100) // 根据数据计算位置 .attr("cy", 50) .attr("r", d => d) // 半径由数据决定 .style("fill", "steelblue"); ``` ##### **2. 核心概念** - **选择集(Selection)**:`d3.select()` 或 `d3.selectAll()` 操作DOM元素[^3]。 - **数据绑定(Data Binding)**:`.data()` 将数组绑定到元素,通过 `.enter()`/`.exit()` 处理新增/删除数据。 - **比例尺(Scales)**:将数据映射到视觉属性(如位置、颜色): ```javascript const xScale = d3.scaleLinear() .domain([0, 100]) // 数据范围 .range([0, 500]); // 像素范围 ``` - **过渡动画(Transitions)**:`.transition().duration(1000)` 实现平滑动画效果。 --- #### **三、开发资源** 1. **官方资源** - [D3.js官网](https://d3js.org):库下载、API文档、示例库。 - [GitHub仓库](https://github.com/d3/d3):源码与社区贡献。 2. **学习教程** - **入门模板**:如 `d3boilerplate`(含HTML/CSS/JS基础结构)[^1]。 - **实战教程**: - [Observable平台](https://observablehq.com/explore):交互式D3示例。 - 《D3.js in Action》书籍:系统学习指南。 3. **扩展工具** - **数据处理**:搭配 `PapaParse` 解析CSV文件。 - **框架集成**:与React/Vue结合使用(如 `react-d3-library`)。 --- #### **四、应用场景** - **商业分析**:动态仪表盘、销售趋势图[^2]。 - **科学研究**:网络关系图(力导向布局)、地理信息可视化。 - **实时数据**:股票行情、物联网设备监控。 > 提示:深入学习需掌握JavaScript基础、SVG绘图原理及数据操作思想。初学者可从修改官方示例代码入手[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值