【 D3.js 入门系列 --- 3 】 做一个简单的图表!

简介:

   我个人的博客: www.ourd3js.com 

    csdn博客为: blog.csdn.net/lzhlzz 

    转载请注明出处,谢谢。


    前面说了几节,都是对文字进行处理,这一节中将用 D3.js 做一个简单的柱形图。

    做柱形图有非常多种方法,比方用 HTML 的 div 标签,或用 svg 。

    推荐用 SVG 来做各种图形。

SVG 意为可缩放矢量图形(Scalable Vector Graphics),SVG 使用 XML 格式定义图像,不清楚什么是SVG的朋友请先在 w3cschools 学习下,内容非常少,非常快就能掌握,不须要记住各种标签,仅仅要知道大概是什么即可,用的时候再查。

    先看以下的代码:

<script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script>  
<script>	
		var width = 600;
		var height = 600;
		var svg = d3.select("body").append("svg")
					   .attr("width",width)
					   .attr("height",height);
		
		var dataset = [ 30 , 20 , 45 , 12 , 21 ];
		
		svg.selectAll("rect")
		   .data(dataset)
		   .enter()
		   .append("rect")
		   .attr("x",10)
		   .attr("y",function(d,i){
				return i * 30;
		   })
		   .attr("width",function(d,i){
				return d * 10;
		   })
		   .attr("height",28)
		   .attr("fill","red");
		   
</script>

    上面代码的结果例如以下图:


    这样就做了一个柱形图。分析一下上面的代码:

    第3-4行: 定义两个变量,分别表示 SVG 绘制领域的宽和高。

    第5-7行: 表示选择 body 后,在 body 里插入 svg 。用 attr 来给 svg 加入属性。

用 attr 加入属性的效果类似于在 HTML 中给<a>元素加入属性 href 。

    第9行: 是要使用的数据。

    第11行: 表示在 svg 中选择全部的 rect 元素,可是实际上这时候 svg 中还不存在 rect 元素。这是 D3 一个比較特殊的地方,即它可以选择一个空集。先不要吃惊,请看第13行。

    第12行: 表示将数据绑定要这个 svg 上。

    第13行: enter 表示当所须要的元素(这里为 rect )比绑定的数据集合的元素(这里为 dataset )少时,自己主动加入位置。使得与数据集合的数量一样多。这里非常重要

    第14行: 紧接上一行。 append 元素 rect 。11-14行常常一起出现。要注意

    第15-27行: 设定 rect 元素的各项属性,如位置,长短,颜色等。

    上面的柱形图,对于每一个柱柱都是手动设定的长度,实际运用中我们经常希望给定一个最大值,让柱柱自己主动依据这个最大值调整百分比,显示出来,怎么办呢?插入例如以下代码:

var wx = d3.scale.linear()
		        .domain([0,d3.max(dataset)])
                .range([0,500]);

    d3.scale.linear() 用于生成一个线性的可缩放的尺度,它的初始 domain 为 [ 0 , 1 ] ,初始 range 为 [ 0 , 1 ] , 这里的[ ]表示的是范围。

如今我们把 domain 设定为 [ 0 , d3.max(dataset) ] ,即0到 dataset 中的最大值。 range设定为0到500。 这表示假设数据是45。则返回500。假设是30。则返回333.333。

    接下来仅仅要在加入 rect 时给width属性赋值的时候换成变量 wx 就可以。

svg.selectAll("rect")
		   .data(dataset)
		   .enter()
		   .append("rect")
		   .attr("x",10)
		   .attr("y",function(d,i){
				return i * 30;
		   })
		   .attr("width",wx)           //注意这里
		   .attr("height",28)
		   .attr("fill","red");

    这样,宽度会随着绑定的数据自己主动变化。


版权声明:本文博主原创文章,博客,未经同意不得转载。






本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/4871017.html,如需转载请自行联系原作者


相关文章
|
5天前
|
前端开发 机器人 API
前端大模型入门(一):用 js+langchain 构建基于 LLM 的应用
本文介绍了大语言模型(LLM)的HTTP API流式调用机制及其在前端的实现方法。通过流式调用,服务器可以逐步发送生成的文本内容,前端则实时处理并展示这些数据块,从而提升用户体验和实时性。文章详细讲解了如何使用`fetch`发起流式请求、处理响应流数据、逐步更新界面、处理中断和错误,以及优化用户交互。流式调用特别适用于聊天机器人、搜索建议等应用场景,能够显著减少用户的等待时间,增强交互性。
|
28天前
|
JavaScript 前端开发 小程序
一小时入门Vue.js前端开发
本文是作者关于Vue.js前端开发的快速入门教程,包括结果展示、参考链接、注意事项以及常见问题的解决方法。文章提供了Vue.js的基础使用介绍,如何安装和使用cnpm,以及如何解决命令行中遇到的一些常见问题。
一小时入门Vue.js前端开发
|
8天前
|
存储 JavaScript 前端开发
前端开发:Vue.js入门与实战
【10月更文挑战第9天】前端开发:Vue.js入门与实战
|
9天前
|
自然语言处理 JavaScript 前端开发
JavaScript高级——ES6基础入门
JavaScript高级——ES6基础入门
12 1
|
13天前
|
Web App开发 JSON JavaScript
深入浅出:Node.js后端开发入门与实践
【10月更文挑战第4天】在这个数字信息爆炸的时代,了解如何构建一个高效、稳定的后端系统对于开发者来说至关重要。本文将引导你步入Node.js的世界,通过浅显易懂的语言和逐步深入的内容组织,让你不仅理解Node.js的基本概念,还能掌握如何使用它来构建一个简单的后端服务。从安装Node.js到实现一个“Hello World”程序,再到处理HTTP请求,文章将带你一步步走进Node.js的大门。无论你是初学者还是有一定经验的开发者,这篇文章都将为你打开一扇通往后端开发新世界的大门。
|
16天前
|
机器学习/深度学习 自然语言处理 前端开发
前端大模型入门:Transformer.js 和 Xenova-引领浏览器端的机器学习变革
除了调用API接口使用Transformer技术,你是否想过在浏览器中运行大模型?Xenova团队推出的Transformer.js,基于JavaScript,让开发者能在浏览器中本地加载和执行预训练模型,无需依赖服务器。该库利用WebAssembly和WebGPU技术,大幅提升性能,尤其适合隐私保护、离线应用和低延迟交互场景。无论是NLP任务还是实时文本生成,Transformer.js都提供了强大支持,成为构建浏览器AI应用的核心工具。
|
16天前
|
前端开发 JavaScript 安全
JavaScript代码混淆入门
JavaScript代码混淆是Web应用安全防护的重要一环,通过一系列技术手段提高代码的防护能力。正确应用混淆策略不仅能有效阻止或延缓恶意攻击,还能在一定程度上保护开发者的核心技术和商业秘密。然而,需要注意的是,混淆并非绝对安全,应将其视为整体安全策略的一部分,结合其他防御措施共同构建坚固的安全防线。
39 0
|
18天前
|
数据采集 JavaScript 前端开发
【逆向基础】JS逆向入门:小白也可以看懂
【逆向基础】JS逆向入门:小白也可以看懂
|
2月前
|
JavaScript API 图形学
一个案例带你从零入门Three.js,深度好文!
【8月更文挑战第1天】本教程无需任何Threejs知识!本教程以入门为主,带你快速了解Three.js开发
77 2
一个案例带你从零入门Three.js,深度好文!
|
2月前
|
JavaScript Apache
js之图表使用
js之图表使用
26 1