继上篇《可视化工具solo show》罗列出一些主要基于Java开发的软件、插件之后,又仔细揣摩了下哪些可以为我所用。

  一番端详之后,准备挑出其中Processing和Prefuse两位大将出来一展雄威!

  (备注:上次和此次“solo show”都未提及gephi,并不是说它不入流,不上档次,恰恰它是一款高大上、优秀的可视化工具,只是这两篇都是在笔者继初探gephi源码绊脚后对一些工具的探讨对比,所以没有将其入列。)

1.Processing:

  Processing 的最初目标是开发图形的 sketchbook 和环境,用来形象地教授计算机科学的基础知识。之后,它逐渐演变成了可用于创建图形可视化专业项目的一种环境。

  Processing 是用 Java 编程语言写的。

  Processing的API地址:http://processing.org/reference/ 有如何着色、画线、呈现图形图像等介绍。

http://processing.org/reference/javadoc/core/

  官网地址:http://www.processing.org/

  Processing开发的是Java Applet应用程序。Java小程序,也就是Java Applet,可以在Web浏览器中运行。Java Applet必须以<applet>脚本的形式嵌入到HTML页面中,才能在web浏览器中运行。它的缺点之一是要使用到Java小应用程序,在某些计算机上载入时可能会很慢,而且并不是每个人都安装了Java(尽管多数人都安装了)。不过这也有解决办法,Processing已经发布了它的JavaScript版本。

  但是Java Applet有自己的短处,效率低,需要JVM支持,没有成型的IDE工具。Java小程序,也就是Java Applet,可以在Web浏览器中运行。Java Applet必须以<applet>脚本的形式嵌入到HTML页面中,才能在web浏览器中运行。)

  下面简要介绍Processing API的一部分:

  Processing 应用程序是有一定结构的,这一点在开发能够持续运行且随时更改显示窗口的图形应用程序(比动画)时非常重要。在这种情况下,就凸显了 setup 和 draw 这两个函数的重要性。

  setup() 函数用于初始化,由 Processing 运行时执行一次。通常,setup() 函数包含 size ()函数(用于定义窗口的边界)以及在操作期间要使用的变量的初始化。Processing 运行时会不断执行 draw ()函数。每次 draw() 函数结束后,就会在显示窗口绘制一个新的画面,并且 draw() 函数也会被再次调用。默认的绘制速度是每秒 60 个画面,但是您也可以通过调用 frameRate() 函数来更改这个速度。

  此外,还可以使用 noLoop() 和 draw() 来控制在何时绘制画面。noLoop() 函数会导致绘制停止,而使用 loop ()函数则可以重新开始绘制。通过调用redraw() 可以控制 draw 在何时调用。

  size() 关键字指定显示窗口的 X 和 Y 坐标。 size ()接受可选的第三个参数 mode。 mode 用来定义要使用的呈现引擎并支持 PDF(直接呈现为 Adobe® PDF 文档)、OPENGL (利用一个可用的 Open-GL 图形适配器)、P3D(为了迅速的 3-D 呈现)等。默认的是 JAVA2D,它最适合于高质量的 2-D 成像。

  可以使用 get() 操作来读取显示中的一个给定像素点的颜色。虽然 set() 很简单,但它不是操做显示的最快方式。要想快速访问,可以使用pixels 数组(与 loadPixels 和 updatePixels 函数一致)。

  在 Processing 内使用单个函数绘制形状十分简单。要设置在绘制形状时使用何种颜色,可以利用 stroke ()函数。此函数可接受一个单独的灰度参数或三个 RGB 参数。此外,还可以用 fill 命令定义这个形状的填充色。

  line() 函数接受四个参数,代表的是要在其间绘制线条的点。rect ()函数可绘制一个矩形,并且前两个点定义位置,而后面两个点则分别定义宽度和高度。ellipse ()函数也接受四个参数,分别定义位置和宽/高度。当宽和高相等时,就是一个圆形。还可以使用 ellipseMode() 函数定制椭圆,它指定 x,y 位置是否代表了椭圆的角(CORNER)或中心(CENTER)。

  quad() 可以很容易地绘制有四个边的多边形。四边形接受八个参数,代表的是这个四边形的四个顶点。

  Processing支持对于键盘和鼠标的事件监听,如keyPressed()、keyRealeased()、mousePressed()、mouseMoved()等。

  Processing支持面向对象编程。

  但是Processing不像下面要介绍的Prefuse已经集成有布局算法了。

  参考资料:http://www.ibm.com/developerworks/cn/opensource/os-datavis/

  下面是在Processing客户端运行的一个demo(当然也可以在Eclipse/Myeclipse中运行,需要安装Processing的插件):

 void setup() {
size(640, 360, P3D);
noStroke();
} void draw() {
background(0);
translate(width / 2, height / 2); // Orange point light on the right
pointLight(150, 100, 0, // Color
200, -150, 0); // Position // Blue directional light from the left
directionalLight(0, 102, 255, // Color
1, 0, 0); // The x-, y-, z-axis direction // Yellow spotlight from the front
spotLight(255, 255, 109, // Color
0, 40, 200, // Position
0, -0.5, -0.5, // Direction
PI / 2, 2); // Angle, concentration rotateY(map(mouseX, 0, width, 0, PI));
rotateX(map(mouseY, 0, height, 0, PI));
box(150);
}

运行的效果图:

2.Prefuse:

  Prefuse的API地址:http://prefuse.org/doc/api/

  Prefuse的用户手册:http://prefuse.org/doc/manual/

  Prefuse是采用Java语言开发的数据可视化工具。其支持丰富的数据模型、可视化、交互的特性,具有表格、树形、一系列的布局和动画的效果。Prefuse使用Java的2D图形库编程,能够有效集成到Java Swing的应用程序和Applets中,并且是free to use。------源码可得。

  官网地址:http://prefuse.org/

  Prefuse是一个提供交互式信息可视化的用户界面工具包。

  Prefuse绘制的图形可以是一个文件系统、计算机网络、网站、生物分类或是社交网络等,图形的展示需要数据,所以需要先得到数据并导入。

  Prefuse提供了图形接口包括节点、边、树状节点、图、树等多种展现形式,其也提供了图形读写接口,包括读取XML、CSV等格式的数据文件。

  Prefuse提供图形过滤功能,包括锁定某一限定范围的图形进行展示和操作。ItemRegistry(组件注册机制)是Prefuse中的核心数据结构机制,它控制原始图形到可视化组件展现之间的映射关系,并且可以针对需要过滤组件提供一个快速迭代的队列。

  Renderers(渲染器)负责画图以及计算图形边界,其也是RendererFacotry针对给定的可视化组件进行可视化呈现的途径。

  渲染器提供了包括图形渲染(ShapeRenderer)、文本渲染(TextRenderer)、文本图像渲染(TextImageRederer)、边渲染(EdgeRenderer)、聚合子树渲染(SubtreeAggregateRenderer)等多种渲染方式。

  数据展示类(Display)提供了在屏幕上画图以及互动性操作,该类继承了javax.swing.JComponent,并通过ControlListener接口以及prefuse.controls进行图形界面监听以及反馈。该类支持屏幕图形的文本编辑、图形变换、平移以及缩放。

  图形处理操作(比如过滤、布局、分配属性等)是通过构造一个叫做Actions的处理模块管道来实现的。ActionLists通过向ActivityManager提交任务并执行。

  Actions中主要包括如下操作:

  Filters: GraphFilter, TreeFilter, FisheyeTreeFilter, FisheyeGraphFilter

  Layout: ForceDirectedLayout, RadialLayout, SquarifiedTreeMapLayout, …

  Assignment: ColorFunction, SizeFunction, FontFunction

  Interpolation: ColorInterpolator, LinearInterpolator, PolarInterpolator

  如何使用Prefuse构建一个app:

  1. 设计可视化界面,确定如何布局、交互;
  2. 确定图数据的输入、输出;
  3. 初始化ItemRegistry和Display(s)类;
  4. 选择或实现Renderers(渲染器)和RendererFactory(渲染工厂);
  5. 构建各种必须的ActionLists;
  6. 使用Actions现有的库,或是定制的模块(或者子模块比如Force函数);
  7. 编写用户回调界面来协调ActionLists。

  补充:Vizster is a prefuse-built visualization of online social network services such as Friendster and Orkut.

Vizster也是基于Prefuse开发的一款在线社交网络可视化软件。

  下面我们看看两个Prefuse自带demo的显示效果:

综上可以发现:Processing简单灵活,只需几行代码即可绘制绚丽的图形,其更侧重艺术效果,如3D效果、投光角度等;

Prefuse灵活度更高,API粒度小,操控方便,而且内置力导向布局、树状布局、网格布局等多种布局方式。

如需转载请标明出处:http://www.cnblogs.com/bigdataZJ/p/VisualizationSoloShow2.html

友情赞助

如果你觉得博主的文章对你那么一点小帮助,恰巧你又有想打赏博主的小冲动,那么事不宜迟,赶紧扫一扫,小额地赞助下,攒个奶粉钱,也是让博主有动力继续努力,写出更好的文章^^。

    1. 支付宝                          2. 微信

                      

可视化工具solo show-----Processing Prefuse show的更多相关文章

  1. 可视化工具solo show

    辗转一圈还是回到了我魂牵梦绕的可视化上来了. 在Gephi+Netbeans上折腾了将近一个星期后,我深深的体会到个人对于代码的驾驭能力尚有提升的空间^_^,路很长,方向很重要,三思而行. 转载请标明 ...

  2. 可视化工具solo show-----Prefuse自带例子GraphView讲解

    2014.10.15日以来的一个月,挤破了头.跑断了腿.伤透了心.吃够了全国最大餐饮连锁店——沙县小吃.其中酸甜苦辣,绝不是三言两语能够说得清道的明的.校招的兄弟姐妹们,你们懂得…… 体会最深的一句话 ...

  3. 漫谈可视化Prefuse(五)---一款属于我自己的可视化工具

    伴随着前期的基础积累,翻过API,读过一些Demo,总觉得自己已经摸透了Prefuse,小打小闹似乎已经无法满足内心膨胀的自己.还记得儿时看的<武状元苏乞儿>中降龙十八掌最后一张居然是空白 ...

  4. Web工程师必备的43款可视化工具

    国外站点DATAVISUALIZATION.CH为大家总结出了当前热用的43款可视化工具,包括Arbor.Chroma.js.D3.js.Google Chart Tools等,绝对让你一饱眼福. 1 ...

  5. 动态可视化 数据可视化之魅D3,Processing,pandas数据分析,科学计算包Numpy,可视化包Matplotlib,Matlab语言可视化的工作,Matlab没有指针和引用是个大问题

    动态可视化 数据可视化之魅D3,Processing,pandas数据分析,科学计算包Numpy,可视化包Matplotlib,Matlab语言可视化的工作,Matlab没有指针和引用是个大问题 D3 ...

  6. MongoDB 安装和可视化工具

    MongoDB 是一款非常热门的NoSQL,面向文档的数据库管理系统,官方下载地址是:MongoDB,博主选择的是 Enterprise Server (MongoDB 3.2.9)版本,安装在Win ...

  7. MySQL学习(一)MySQLWorkbench(MySQL可视化工具)下载,安装,测试连接,以及注意事项

    PS:MySQLWorkbench是MYSQL自带的可视化工具,无论使用哪个可视化工具,其实大同小异,如果想以后走的更远的话,可以考虑使用命令行操作数据库MYSQL.可视化工具让我们初学者更能理解数据 ...

  8. 使用强大的可视化工具redislive来监控我们的redis,别让自己死的太惨~~~

    作为玩windows的码农,在centos上面装点东西,真的会崩溃的要死,,,我想大家也知道,在centos上面,你下载的是各种源代码,需要自己编译...而 使用yum的话,这个吊软件包有点想nuge ...

  9. 使用可视化工具redisclient连接redis

    可视化工具推荐:http://database.51cto.com/art/201505/477692.htm 1.连接redis服务端 1.1 设置连接密码:在redis根目录下,双击redis-c ...

随机推荐

  1. Android学习地址

    Google Android官方培训课程中文版http://hukai.me/android-training-course-in-chinese/

  2. 安装RPM包或者安装源码包

    本系列的博客来自于:http://www.92csz.com/study/linux/ 在此,感谢原作者提供的入门知识 这个系列的博客的目的在于将比较常用的liunx命令从作者的文章中摘录下来,供自己 ...

  3. 一个简单的RMAN自动备份脚本

    rman备份脚本: #!/bin/bashsource /home/oracle/.bash_profile rman target / << EOFrun {allocate chann ...

  4. Paxos算法细节详解(一)--通过现实世界描述算法

    Paxos分析 最近研究paxos算法,看了许多相关的文章,概念还是很模糊,觉得还是没有掌握paxos算法的精髓,所以花了3天时间分析了libpaxos3的所有代码,此代码可以从https://bit ...

  5. javascript检测ActiveX插件是否安装/启用

    本文主要提供在IE浏览器下检测ActiveX插件安装/启用的状态. 在一些应用开发中,需要用到一些第三方提供的ActiveX插件,如Flash插件. 为了在未安装插件的浏览器显示友好的提示,需要用到主 ...

  6. Sensor(LIGHT)

    package com.example.sensor01; import java.util.List; import android.hardware.Sensor; import android. ...

  7. AndroidPn源码分析(一)

    好了,开始研究源码了.目前对androidpn,只限于使用过它,跑了一下demo.现在开始研究一下源码. (一)入口 当服务器端启动的时候,控制台会打印一些log,除了spring和hibernate ...

  8. 【T-SQL基础】03.子查询

    以前总是追求新东西,发现基础才是最重要的,今年主要的目标是精通SQL查询和SQL性能优化. 本系列[T-SQL基础]主要是针对T-SQL基础的总结. [T-SQL基础]01.单表查询-几道sql查询题 ...

  9. JS中的闭包

    在复习JS高程的过程中,在第七章闭包那节,发现自己看不太明白了.之前看高程的时候,都弄得挺清楚了,怎么现在反而又看不懂了. 嗯,也许更深层次的东西涉及到编译原理的知识了.嗯,在研究完SPA后就开始学习 ...

  10. 知方可补不足~sqlserver中的几把锁~续

    回到目录 之前写过相关的文章,对脏读,不可重复读,幻读都做了相当的研究,而今天在程序中又出现了这个问题,即当一条数据被update时,另一个线程同时发起了读的操作,这对于序列化级别的事务是不被允许的, ...