d3js mysql_D3js技术文档 可视化展现

转载请注明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页面,即可看到类似的拓扑关系图

c5055d4321c340767756f4099c5ff3a5.png

其他问题

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

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

Reference

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/573402.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

text-indent的用法

一、text-indent应用于块级元素 <style type"text/css">*{margin:0;padding:0;}body{font-size:12px;color:#333;}p{text-indent:2em;background-color:#f00;color:#fff;}</style> </head> <body><p>携程旅行网携程旅行网携程旅行网携…

kettle连接mysql教程_kettle 连接 mysql8

kettle默认使用的是org.gjt.mm.mysql.Driver&#xff0c;而mysql 8.0以上connector已经不再支持这个包名;即使将mysql-connector-java-8.0.xx.jar包拷贝到data-integration/lib目录下&#xff0c;还是报错找不到驱动;所以要用jndi方法配置kettle&#xff0c;用com.mysql.cj.jdb…

小白学数据分析--留存率使用的窘境

小白学数据分析--留存率使用的窘境 随着移动游戏整体的火热&#xff0c;现在看到太多的数据&#xff0c;太多信息&#xff0c;很多时候我们仰慕和钦佩别人的成功&#xff0c;我们总是把这个行业达成所谓共识的一些数据来出来说明问题。因为我们笃信数据是有力的证据&#xff0c…

python嵩天第七章课后题答案_python语言程序设计嵩天第七章答案

参考答案如下直流负反馈可以稳定电路的静态工作点&#xff0c;嵩天交流负反馈可以改善放大器的动态性能。餐厅环境准备包括&#xff1a;程序( )、背景音乐、通风及温度的准备。设计下列代码的输出结果是______var a \abcd45 钢锻造后出现带状组织&#xff0c;章答在淬火前需要…

mongodb的返回(2)

限制条件 - 结果集转&#xff08;转汇智网&#xff09; 很多时候查询返回的结果集并不完全是你想要的&#xff0c;或许你只需要它们中间的一部分&#xff0c;这个时候我们可以通过条件来限制结果集返回的内容。 limit方法&#xff1a;设定返回结果集中的最大文档数量。 语法&am…

用groovy采集网页数据

首先&#xff0c;用 http://groovyconsole.appspot.com/ 测试下面的代码&#xff0c;发现引用总是失败. 下载了GGTS&#xff1a; https://spring.io/tools/ggts 测试成功&#xff1a; Grapes( Grab(grouporg.ccil.cowan.tagsoup, moduletagsoup, version1.2) )import org.ccil…

vue 时间回显 格式化_VSCode 开发Vue必备插件

1。Vetur —— 语法高亮、智能感知、Emmet等包含格式化功能&#xff0c; AltShiftF &#xff08;格式化全文&#xff09;&#xff0c;CtrlK CtrlF&#xff08;格式化选中代码&#xff0c;两个Ctrl需要同时按着&#xff09;2。EsLint —— 语法纠错3。Debugger for Chrome —— …

angluar.js 学习

地址&#xff1a; http://www.cnblogs.com/freefed/p/4835427.html 如何搭建一个angularJS应用 http://www.cnblogs.com/Cuiy/p/4285520.html 初识Angular.js https://github.com/xufei/blog/issues xufei的博客 指令&#xff1a; ng-hrefng-srcng-disabled ng-disabled"…

公司消费一卡通“变法”记

一卡通在每家公司都存在&#xff0c;不仅含考勤机&#xff0c;还会有门禁&#xff0c;订餐&#xff0c;食堂消费等。我们公司采用的是厦门舒特科技的一卡通系统&#xff0c;前后用了好几年了。 在我之前&#xff0c;一卡通的功能主要启用了考勤和消费这两大模块。 1、考勤机是每…

mysql添加分区健_MySQL添加分区添加索引

添加新用户 今天在为mysql添加新用户时&#xff0c;找到下面这条指令&#xff1a; insert into mysql.user(Host,User,Password) values("localhost","test",password("1234")); 然后退出 mysql>\q 重新登录 $mysql -u …

win7 mysql添加到服务_MySQL服务添加到Windows系统服务中

MySQL的安装配置(win7 64-bit)转&#xff0c;整理。MySQL 版本是mysql-noinstall-5.1.66-winx64.zip(免安装版)mysql-workbench-gpl-5.2.44-win32.msimysql-connector-java-5.1.22mysql 配置数据库编码为utf-8(my.ini中指定).1 安装先将mysql-noinstall-5.1.66-winx64.zip解压缩…

OA,ERP等源码一部分演示

更多源码http://www.pssdss.com QQ:11851298 功能强大的JAVA开发的ERP源码http://cx050027.pssdss.com:8080/ 用户名pssdss 密码pssdss 超强大仿微盟JAVA开发微信公众平台源码JAVA源码,有代理功能http://www.pssdss.com/d329.html 大型汽车4S综合连锁服务管理系统源码 汽车美…

eslint不报错 vue_2-2【微信小程序全栈开发课程】index页面搭建--ESlint格式错误

1、修改入口文件也就是src/pages/index/main.js文件main.js是入口文件&#xff0c;通过main.js来加载index.vue文件。每个页面文件夹中都要有main.js文件//加载vue组件和index.vue文件 import Vue from vue import App from ./index//新建一个index页面的Vue实例 const app ne…

动态代理-实例解析

转自http://weixiaolu.iteye.com/blog/1477774 动态代理实例如下所示&#xff1a; package cn.xiaolu;import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy;/*** 动态代理类使用到了一个接口InvocationHandler和一个…

linux下安装libsvm_在ubuntu下的Matlab中使用libsvm

事情的起因当然是因为一个错误&#xff0c;我平时一直在windows下用libsvm&#xff0c;当把程序放到安装了Ubuntu的服务器上就报错了&#xff0c;错误如下&#xff1a;Error using svmtrain (line 233)Y must be a vector or a character array.这个错误出现在matlab自带svmtra…

需求分析、概要设计

最近和一个朋友聊天&#xff0c; 发现还是需要一些理论功底&#xff0c;没事到网上找点资料看看吧 按照传统软件工程的软件过程,区别如下:1.需求分析--产生 软件功能规格说明书,需要确定用户对软件的需求,要作到明确、无歧义。不涉及具体实现方法。用户能看得明白&#xff0c;开…

mysql 事b务 查询_MySQL进阶学习笔记二(包括连接查询、子查询、联合查询、事务、存储过程)...

1、高级查询(1)了解笛卡尔积&#xff1a;笛卡尔乘积是指在数学中&#xff0c;两个集合X和Y的笛卡尔积(Cartesian product)&#xff0c;又称直积&#xff0c;表示为X Y&#xff0c;第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员&#xff0c;笛卡尔积在SQL…

当前,我们的DJANGO项目的requirements.txt文件

晒一晒&#xff0c;看用得多不多。。&#xff1a;&#xff09; amqp1.4.7 anyjson0.3.3 billiard3.3.0.21 celery3.1.19 celery-with-redis3.0 cx-Oracle5.1.2 Django1.8.4 django-bootstrap36.2.2 django-celery3.1.17 django-grappelli2.7.3 django-tinymce2.2.0 djangorestf…

python字典的应用实验报告_Python字典应用的一个例子

#!/usr/bin/env python#定义一个空字典db {}def newuser():prompt --login desired: while True:name raw_input(prompt)#根据关键字name看字典中是否已存在此键值对if db.has_key(name):prompt --name taken, try another: continueelse:breakpwd raw_input(passwd: )#存…

Untiy3D Material 材质系统

材质系统在任何引擎里面都算一个大模块&#xff0c;我也遍了解遍写&#xff0c;写到哪里算哪里。 里面涉及到材质属性系统&#xff0c;底层Shader模块和纹理Texture模块。所以比较复杂&#xff0c;如果理解材质系统&#xff0c;那就能控制整个游戏画面渲染效果。 Material 材质…