d3js技术文档

D3js技术文档

概述

D3 allows you to bind arbitrary data to a Document Object Model (DOM), and then apply data-driven transformations to the document. For example, you can use D3 to generate an HTML table from an array of numbers. Or, use the same data to create an interactive SVG bar chart with smooth transitions and interaction.

D3 is not a monolithic framework that seeks to provide every conceivable feature. Instead, D3 solves the crux of the problem: efficient manipulation of documents based on data. This avoids proprietary representation and affords extraordinary flexibility, exposing the full capabilities of web standards such as CSS3, HTML5 and SVG. With minimal overhead, D3 is extremely fast, supporting large datasets and dynamic behaviors for interaction and animation. D3’s functional style allows code reuse through a diverse collection of components and plugins.

特点

D3的全称是(Data-Driven Documents),顾名思义可以知道是一个关于数据驱动的文档的javascript类库。说得简单一点,D3.js主要是用于操作数据的,它通过使用HTML、SVG、CSS来给你的数据注入生命,即转换为各种简单易懂的绚丽的图形。

D3 是最流行的可视化库之一,它被很多其他的表格插件所使用。它允许绑定任意数据到DOM,然后将数据驱动转换应用到Document中。你可以使用它用一个数组创建基本的HMTL表格,或是利用它的流体过度和交互,用相似的数据创建惊人的SVG条形图。

环境和安装d3js

环境:windows 7

 

 

         安装方法:   https://github.com/mbostock/d 下载d3压缩包,将其解压放入工程目录其内包含了d3的js库。比如本文使用ror环境开发,则将解压好的d3.js      文件放入C:\Users\Administrator\Desktop\portal-ec2\app\assets\javascripts目录下。

 

 

 

 

 

 

 

 

 

 

 

 

工作内容

把工程内对应的交换机和虚拟机的拓扑结构用d3js表现出来。交换机和虚拟机的拓扑关系储存在工程内数据库(mysql)中,通过使用ruby语言将数据库中数据关系导出来后,使用d3js将其数据可视化。

数据库中有3张表来表示这个拓扑关系:

1、  switch_type:表示交换机是物理交换机还是虚拟交换机

2、  switch_to_switch:表示交换机之间的连接关系

3、  vm_to_switch:表示虚拟机和交换机之间的连接关系

工作流程

1.    将数据从数据库中导出

在对应的controller中取出数据库数据,放入相应的实例变量

#存储拓扑

def topo

@vts = VmToSwitch.all

@sts = SwitchToSwitch.all

@stvs = SwitchToVswitch.all

End

在对应的views文件中储存所得到的实例变量中的数据

<% vts_size = @vts.size %>

<% sts_size = @sts.size %>

<% stvs_size = @stvs.size %>

<% all_size = vts_size + sts_size + stvs_size %>

<% v_and_s = Array.new(all_size ) %>

<% for i in 0..sts_size-1 do %>

<% v_and_s[i] = @sts[i] %>

<% end %>

<% for i in sts_size..sts_size+vts_size-1 do %>

<% v_and_s[i] = @vts[i-sts_size] %>

<% end %>

<% for i in sts_size+vts_size..all_size do %>

<% v_and_s[i] = @vts[i-sts_size-vts_size] %>

<% end %>

这样,所有的关系都已经储存在v_and_s数组中了。

2.    把数据生成拓扑关系

生成拓扑关系中的点,放入nodes数组中

for(i = 0;i < idnum - vts_size; ++i)          //把switch放入nodes

{

var node1 = {

"name": ids[i],

"type": "circle",

"switch_type": hashTable2[ids[i]]

};

nodes.push(node1);

}

for(i = idnum - vts_size;i < idnum; ++i)     //把vm放入nodes

{

var node1 = {

"name": ids[i],

"type": "rect",

"switch_type": "rect" };

nodes.push(node1);

}

生成拓扑关系中的边,放入edges数组中

for(i = 0 ; i < all_size; ++i)

{

var ss = hashTable[all_array[i][0]];

var tt = hashTable[all_array[i][2]]

var desc = all_array[i][1];

var edges1 = {

"source": ss,

"target": tt,

"des": desc

};

edges.push(edges1);

}

这样就能生成如下所示的数据对象数组,这样是为了对应d3js中相应的函数

nodes: [

{ name: "s1" , type:”cicle”,switch_type:”1”},

{ name: "s2" ,type:”cicle”,switch_type:”1”},

{ name: "s3" ,type:”rect”,switch_type:”2”}

]

edges: [

{ source: 0, target: 1 ,des:"s1"},

{ source: 0, target: 2 ,des:"s2"},

{ source: 1, target: 2 ,des:"s3"}

]

3.    利用数据生成对应的图形

以下工作都是在js脚本中进行,把此js脚本嵌入html页面即可实现可视化功能

在body元素最后添加svg图形

var svg = d3.select("body").append("svg")

.attr("width", w)

.attr("height", h);

利用d3js函数库生成力导向模型(拓扑关系图)

var force = d3.layout.force()

.nodes(nodes)

.links(edges)

.size([w, h])

.linkDistance([150])

.charge([-3000]);

force.start(); //启动模型

生成图形中的边

var edges = svg.selectAll("line")

.data(dataset.edges)

.enter()

.append("line")

.style("stroke", stroke_color)

.style("stroke-width", stroke_width)

.call(force.drag);

生成图形中的点

var node = svg.selectAll("node");

node = node.data(dataset.nodes);

var nodeEnter = node.enter().append("g")

.attr("class", "node")

.call(force.drag);

nodeEnter.append("circle")

.attr("r", 10)

.style("fill", function(d, i) {

return color(i); })

4.    完成

最后,打开对应的html页面,即可看到类似的拓扑关系图

其他问题

在学习d3的过程中,需要了解相应的js语言的知识,其中对应匿名函数的应用非常多,可以进行相应的学习。

在画拓扑关系中遇到一个很痛苦的事情是把矩形和圆表现在一个svg图形中并且使他们满足对应的关系,这样用函数不能进行图形的选择,我做的方法是在一个点中同时添加一个矩形和一个圆,然后可以根据点的属性type来使圆显示或者使矩形显示,这样就做出了将圆和矩形连接在一起的效果!

Reference

官方文档:http://d3js.org/

官方力导向模型学习文档:https://github.com/mbostock/d3/wiki/Force-Layout

官方资源:https://github.com/mbostock/d3

时间: 2024-08-01 22:43:28

d3js技术文档的相关文章

开源进销存PSI - 技术文档目录

开源进销存PSI技术文档目录 1.本地环境搭建 2.总体技术架构 PSI概要设计文档在这里

OCR识别技术文档识别怎么用

OCR识别技术文档识别的概括 我们常说的OCR.文字识别.OCR识别技术文档识别是指通过电子设备等将纸质上的文字识别出来,形成可编辑的文字. OCR识别技术文档识别的流程 随着扫描仪的普及与广泛应用,再加上摄像头迅速发展的手机等智能终端设备的应用,OCR识别技术文档识别软件越来越被应用于各种业务系统中. 常规的OCR文字识别处理的过程包括: 1.图像输入.预处理:二值化图片.噪声去除.倾斜较正: 2.版面分析:把页面分为横排文本.竖排文本.表格.图片等不同区域,帮助字符切割.识别OCR: 3.设

Atitit usrQBK1600 技术文档的规范标准化解决方案

1.1. Keyword关键词..展关键词,横向拓展比较,纵向抽象细化拓展知识点1 1.2. 标题必须有高大上词汇,参考文章排行榜,1 1.3. 标题带语言关键词c#.net js javascript  c++ python1 1.4. 标题最好有英文版本的,方便英文查询1 1.5. 标题atitit前缀,attilax总结结尾方便查询1 1.6. 标题后面带上版本号v2 qbf等,方便时间对比1 1.7. 正文要求 修辞好(引用典故名句,成语 等,使用修辞方法)2 1.8. 引用寓言故事 类

Xamarin技术文档------VS多平台开发

此技术业余时间研究,仅供大家学习参考,不涉及深入研究,有一定开发基础的人员,应该都能较快上手. 一.简介 Xamarin始创于2011年,旨在使移动开发变得难以置信地迅捷和简单.Xamarin的产品简化了针对多种平台的应用开发,包括iOS.Android.Windows Phone和Mac App.Xamarin由许多著名的开源社区开发者创立和参与,而且也是Mono项目的主导者--C#与.NET框架的开源.跨平台实现. 作为一个跨平台开发框架,Xamarin.Mobile有很多优点.在这一框架内

如何快速阅读并理解英文的技术文档

作为一名程序员,要实现我们的产品,首先需要选择一种或几种编程语言,其次是使用各种工具和第三方库. 而在这个过程中,就少不了对这些语言.工具和第三方库的下载和学习. 下载一般都非常简单,但是关于如何使用,相信大家都会有各种各样的学习方法. 但是不管通过什么方式,追根溯源都会来到官方文档. 那么问题就来了!目前来说,大部分的官方文档都是英文的,如何才能快速的理解并使用官方文档呢? 今天,把自己的学习方法拿出来,和大家一起分享一下,希望大家可以尽量少走一些弯路,尽快的找到bug的解决方法. 说起来很简

DL动态载入框架技术文档

DL动态载入框架技术文档 DL技术交流群:215680213 1. Android apk动态载入机制的研究 2. Android apk动态载入机制的研究(二):资源载入和activity生命周期管理 3. APK动态载入框架DL解析 4. Android 使用动态载入框架DL进行插件化开发 5. DL插件开发笔记 6. DL开发注意事项 附:DL层次结构图

Boost.Asio技术文档

Christopher Kohlhoff Copyright ? 2003-2012 Christopher M. Kohlhoff 以Boost1.0的软件授权进行发布(见附带的LICENSE_1_0.txt文件或从http://www.boost.org/LICENSE_1_0.txt) Boost.Asio是用于网络和低层IO编程的跨平台C++库,为开发者提供了C++环境下稳定的异步模型. 综述 基本原理 应用程序与外界交互的方式有很多,可通过文件,网络,串口或控制台.例如在网络通信中,完

斯巴鲁汽车 技术文档下载方法

昨天深夜,突然朋友找我帮忙,下载斯巴鲁的技术文档.原本以为是因为某些原因他访问不到国外的网站,结果却让我惊呆了!妈蛋,这pdf有1000多个啊··· 朋友在国外的论坛上找到有人可以下载,而且已经贴上了源码,只是他不懂. 论坛地址为:http://www.subaruoutback.org/forums/138-gen-5-2015-present/280682-2016-owner-s-service-manuals-posted.html 这是文档下载的网站:http://techinfo.s

程序员如何编写好开发技术文档 如何编写优质的API文档工作

编写技术文档,是令众多开发者望而生畏的任务之一.它本身是一件费时费力才能做好的工作.可是大多数时候,人们却总是想抄抄捷径,这样做的结果往往非常令人遗憾的,因为优质的技术文档是决定你的项目是否引人关注的重要因素.无论开源产品或面向开发者的产品,均是如此. 实际上,我想说明的是:对于面向开发者的产品来说,其用户体验中最重要的一环并不是什么主页设计.登录过程.或者SDK下载.真正最重要的是产品的API文档!如果没人知道你的产品如何使用,纵使它巧夺天工,又有何用? 如果你是一个专门从事面向开发者产品设计