转载请注明http://www.cnblogs.com/juandx/articles/3885220.html

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文件中储存所得到的实例变量中的数据

这样,所有的关系都已经储存在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://www.cnblogs.com/juandx/articles/3885220.html

d3js mysql_D3js技术文档 可视化展现相关推荐

  1. 这谁写的技术文档?我想锤死他...

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"书",获取 后台回复"k8s",可领取k8s资料 很多技术人自己非 ...

  2. 如何撰写出优秀的技术文档

    技术文档分为两类,一类指开发中要用到的研发文档,一类是给客户看的客户文档,技术文档不仅仅适用于SaaS开发,他在各个领域都很常见,能够帮助记录团队/公司内部的一些资料,便于员工进行查询,通过正确的方法 ...

  3. 如何写好技术文档——来自Google十多年的文档经验

    文章目录 文档的重要性 为什么大多数人都不喜欢写文档? 如何产出高质量文档 像管理代码一样管理文档 明确你的读者是谁 清晰的分类 参考文档 设计文档 引导类文档 概念性文档 Landing pages ...

  4. unity3d 脚本参考-技术文档

    unity3d 脚本参考-技术文档 核心提示:一.脚本概览这是一个关于Unity内部脚本如何工作的简单概览.Unity内部的脚本,是通过附加自定义脚本对象到游戏物体组成的.在脚本对象内部不同志的函数被 ...

  5. 如何写好技术文档 - 来自 Google 十多年的文档经验!

    星标/置顶 公众号????,硬核文章第一时间送达! 本文大部分内容译自<Software Engineering at Google> 第10章节 Documentation.另外,该书电 ...

  6. [技术文档] 一劳永逸,用USB设备制作多系统引导

    2019独角兽企业重金招聘Python工程师标准>>> [技术文档] 一劳永逸,用USB设备制作多系统引导  [复制链接] binghe27 艺有所成 当前离线 主题 8  UID ...

  7. 不写技术文档是个什么梗

    写文档在工作中很常见了,正规的公司都有文档,除非是很简单的东西. 文档用来给新人或不熟悉的人的看,出需求也要文档.只凭笔在本子上划几下不能让人懂. 凡是稍微复杂的东西一定用文档梳理流程,有的还有流程图 ...

  8. 做一个像Keras在线技术文档(Sphinx + GitHub + Read the Docs)

    之前看到Keras的中文文档十分心动也想自己做一个,最终被我做成了.这里写一下制作流程. 制作效果感觉还是不错的 链接:https://opencv-learning.readthedocs.io/z ...

  9. 代码统计工具1.1版本技术文档

    代码统计工具1.1版本技术文档 说明:主要记录自己在做这个项目的过程中用到的方法和相关技术 1.首先面临的问题就是怎样选择一个目录,网上搜索了一下,下面是解决方案(用到目录对话框) (1)从默认的磁盘 ...

最新文章

  1. firefox如何载入json文件_如何去解决JS跨域问题 怎么能学好Web前端开发
  2. [Silverlight]常见问题
  3. js计算器代码加减乘除_如何用jQuery做一个简易版计算器
  4. Django模型自定义查询管理器
  5. python暂停和恢复_python-线程的暂停, 恢复, 退出
  6. 【MFC系列-第22天】GDI算法实战——过渡色
  7. 前端学习(2610):vuex实现删除
  8. 【转】HTTP请求中的form data和request payload的区别
  9. 学习神经网络:搭建一个vgg-11模型在FashionMNIST训练
  10. 解决Ubuntu远程连接mysql连不上的问题
  11. 冷眼看“艾艾提”炮轰“洪波”“老牛”
  12. wms仓库管理系统带来的效益
  13. 1.18 Spreadsheet
  14. Linux命令df和du
  15. 什么是接口测试和功能测试?
  16. 熊分享-负重前行有我陪伴!
  17. Firefly-RK3399安装环境
  18. 服务器不正常断电关机导致sqlserver被标记为“可疑”
  19. 如何下载百度地图离线包并导入OruxMaps查看
  20. 使用CSDN—MarkDown编辑数学公式

热门文章

  1. java entity转dto_java 使用反射在dto和entity 实体类之间进行转换
  2. weblogic 10.3.0.0 for linux下载地址,weblogic10.3下载地址
  3. 计算机管理也无法运行,【两种解决方法】任务管理器打不开怎么办?
  4. 通过日志恢复oracle序列,(存档日志包含序列84,要求序列36)怎么恢复啊?
  5. mysql数据库(9):常用查询的例子
  6. 熵权法 —— python
  7. Python数模笔记-Sklearn(4)线性回归
  8. python下的mysql模块包装
  9. swift面向对象之属性
  10. 三星s2 硬刷Android 8,三星T710(GALAXY Tab S2 8.0)一键救砖教程,轻松刷回官方系统...