首页 > 范文大全 > 正文

基于Processing的信息可视化研究

开篇:润墨网以专业的文秘视角,为您筛选了一篇基于Processing的信息可视化研究范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要:Processing是一个开源的可视化设计工具。它为从事可视化设计的广大科研工作者提供强大的技术支持。该文对Processing的API及核心库做了简单介绍,并通过具体应用描述了Processing进行可视化设计的全过程。

关键词:Processing;信息可视化;交互;固定资产

中图分类号:TP391文献标识码:A文章编号:1009-3044(2009)13-3543-02

1 引言

随着计算机技术和网络技术的飞速发展,当今社会已进入信息化时代,人们需处理的信息已经呈现出爆炸性增长的态势。为了探索繁杂的抽象信息之间的复杂关系,经常需要对大量的信息进行分析、归纳,并从大量杂乱无序的信息中发现隐藏在其中的信息本质特征与规律,因此,诞生了一门结合科学可视化、人机交互、数据挖掘、图像技术、图形学和认知科学等诸多学科理论和方法的新学科──信息可视化(Information Visualization)。经过十几年来的发展,信息可视化获得了一系列研究成果,其发展前景方兴未艾。然而由于信息可视化技术自身所具有的多样性、复杂性及跨学科性,使得如何将已有的技术应用到具体的应用当中成为长期以来困扰可视化应用开发设计人员的一个难题。因此,一系列信息可视化框架及工具包应运而生,其中以InfoVis[1]、Prefuse[2]及Piccolo[3]尤为著名。本文引入一个功能强大、使用方便、源代码开放的信息可视化开发工具――Processing,它大大提高了我们进行可视化设计的效率。

2 信息可视化的相关概念

可视化是将数据信息和知识转化为一种视觉形式,利用人们对可视模式快速识别的自然能力[4]。可视化分为科学计算可视化和信息可视化两类。信息可视化是在科学计算可视化的基础上发展起来的。科学计算可视化(Visualization in Scientific Computing)是1987年由B.H.McCormick 等人根据美国国家科学基金会召开的科学计算可视化研讨会的内容撰写的一份报告中正式提出来的[5]。信息可视化是1989年在Robertson、Card和Mackinlay发表的文章《用于交互性用户界面认知协处理器》中第一次出现[6],随后信息可视化迅速发展成为与科学计算可视化并列的研究领域。Jim Foley在2000年发表的关于计算机图形学的“十大尚未解决的关键问题”一文中,将信息可视化列为第三位[7]。

信息可视化结合了科学可视化、人机交互、数据挖掘、图像技术、图形学、认知科学等诸多学科的理论和方法。信息可视化完整的过程应包括信息组织与调度、静态可视化、过程模拟和探索性分析等四个过程如图1所示[8]。

3 Processing概述

Processing[9]是一个由Casey Reas 和 Benjamin Jotham Fry发起的开源项目,主要目标是设计成为一个非程序开发人员的可视化设计工具。Processing建立在JAVA语言的基础上,但是大大的简化了JAVA语言。Processing可以跨平台使用,产生基于Web的Applet,也可以很容易生成Java应用程序。因为是一个开源项目,processing也有很好的开源社区支持,大量的扩展的API得到开发,以支持Processing在可视化的各方面的应用。另外,我们也可以基于Processing为原型,根据应用的需求,在它的基础上进行二次开发,从而建立独立的信息可视化应用系统。

3.1 Processing的 API

Processing的API大多的是JAVA平台,Processing的API可以分为15个部分。Structure部分包含Processing基本的语法符号以及关键字,还包括Processing的一些常用的基础函数。Environment包含处理全局环境属性的十个属性。Data包含Processing的全部数据类型以及一些如类型转换之类的有用的函数。Control部分主要用来控制程序流。Shape部分包含预设的几何图形函数,这部分为Processing能有效应用于信息可视化提供了非常重要的支持,JAVA语言虽然也有这方面的函数,但是操作起来明显比Processing复杂很多。Shape包括一些二维的基本图形元素、曲线、三维的基本体元素,点以及处理这些基本元素的一些属性函数及变量。Input部分涉及到数据的输入和接收,为Processing提供从鼠标、键盘、文件、Web以及Time&Date获取信息。Output涉及到数据的输出,数据可以输出到屏幕、文件或生成图片。Transform通过实现矩阵的一系列操作来产生创新的效果。Lights和Camera是Processing比较难以使用的部分,包括处理场景的光线、物体的位置、各种坐标系统的变换、物体的材制特性等函数。Color用来产生颜色、设置颜色以及获取颜色值。Image主要涉及到Processing对图片的调用和修改,提供了PImage类,它封装了许多的特性,使用Processing对图片进行处理非常简单。Rendering提供进行图形创建和渲染。Typography分为PFont ,Loading&Displaying ,Attributes, Metrics四部分。Math为Processing提供一些处理数据的函数或操作符。Constrants部分只有HALF_PI,TWO_PI,PI三个常量,在三角函数处理中是非常有用的[10]。

3.2 Processing的核心库

为了扩展Processing语言,Processing还提供了Processing的核心库,Processing默认带了XML Import、OpenGL Import、Video Import、Network Import、Serial Import、Minim Import、 PDF Import、DXF Import和JavaScript等几个库。这些库扩展了Processing在视频、网络、串口通信和JavaScript等领域的功能。为了扩展核心库,还有40多个开源社区用户贡献的库,每一个库都带有自己的API。这些库扩展了Processing在声音控制、物理、运行检测和数据库连接等方面的功能[11]。

4 Processing中的信息可视化应用实例

下面我们用某高校的固定资产投入数据来分析Processing信息可视化流程。我们要处理的是该校近几年的固定资产投入数据进行可视化。根据Ben Fry提出的可视化设计流程如图2[12],当然这些步骤也不能盲目遵循,整个流程也不是一成不变的。

图2 可视化设计流程

4.1 数据获取和解析

我们从某高校的固定资产管理部门获得该校近几年的固定资产投入数据。对固定资产近几年的数据进行分析和抽取,因为我们目前只对固定资产的总投入、学校每年固定资产的投入和每年新增固定资产件数进行数据可视化,所以,我们从固定资产管理处的大量数据中,只提出了这部分的数据,这些数据部分可以从资产管理处里的数据库中查到,但是有些数据只能从以前的统计表上获取,然后,对这些数据进行处理,以适合Processing进行操作。在这里我们自定义了一个类ReadData来读取这些数据。

data = new ReadData("capital_assets.tsv");

4.2 数据过滤和挖掘

为了寻找适合的尺度去将数据可视化,首先我们必须将原始数据里每列的最大值最小值找出,在自定义类里ReadData里我们实现求列最大和最小值的方法。

// 首先使用常量MIN_FLOAT来初始化变量m

float m = MIN_FLOAT;

// 通过迭代获取最大值

for (int row = 0; row < rowCount; row++) {

if (isValid(row, col)) {

if (data[row][col] > m) {

m = data[row][col];}}}

同样还有整个数据的最大最小值。然后利用map(years[row], yearMin, yearMax, plotX1, plotX2)来进行坐标重新分配。

4.3 信息可视化和优化

信息可视化之前,首先要确定X轴Y轴的尺度和大小。从数据来看,这是时间序列的数据,X轴按年份表示,Y轴就按每年的固定资产投入来表示。在setup()函数中设置如下:

plotX1 = 50;

plotX2 = width - plotX1;

plotY1 = 60;

plotY2 = height - plotY1;

然后,在draw()中画出图形rect(plotX1, plotY1, plotX2, plotY2),但是这还只是一个框,下面将数据表示出来:

int rowCount = data.getRowCount( );

for (int row = 0; row < rowCount; row++) {

if (data.isValid(row, col)) {

float value = data.getFloat(row, col);

float x = map(years[row], yearMin, yearMax, plotX1, plotX2);

float y = map(value, dataMin, dataMax, plotY2, plotY1);

point(x, y);}}

4.4 可视化优化和交互设计

从上一步骤我们基本上已将信息进行了可视化表示,为了更好用户体验,提供更好的可视化效果,让用户能按需求进行可视化表示,这里我们设计了用户交互,让用户参与可视化设计,这样,更有利于信息的表征,使可视化更有效。下面的代码就是当用户鼠标移动到曲线上,会显示出当年的固定资产投入等数据。显示效果如图3所示。

for (int row = 0; row < rowCount; row++) {

if (data.isValid(row, col)) {

float value = data.getFloat(row, col);

float x = map(years[row], yearMin, yearMax, plotX1, plotX2);

float y = map(value, dataMin, dataMax, plotY2, plotY1);

if (dist(mouseX, mouseY, x, y) < 3) {

strokeWeight(10);

point(x, y);

fill(0);

textSize(10);

textAlign(CENTER);

text(nf(value, 0, 2) + " (" + years[row] + ")", x, y-8);

textAlign(LEFT);}}}

另外,我们还通过keyPressed()函数来增加了键盘的操作,可以通过键盘操作“+”、“-”来选择总金额、年增加金额和台件可视化图。

if (key == '-') {

currentColumn--;

if (currentColumn < 0) {

currentColumn = columnCount - 1; }}

else if (key == '+') {

currentColumn++;

if (currentColumn == columnCount) {

currentColumn = 0;}}

5 总结

本文给出了基于Processing的信息可视化技术,介绍了Processing的API和核心库,并通过可视化某校固定资产投入数据展示了Processing的可视化设计流程,通过使用Processing,很大程度上的减少了我们的工作量,提高了我们的开发效率。期望本文工作有助于信息可视化技术的发展。

参考文献:

[1] Fekete J D. The InfoVis Toolkit[C].IEEE Symposium on Information Visualization 2004.USA:IEEE Computer Society.Austin, Texas,2004:167-174.

[2] Heer J. prefuse: a toolkit for interactive information visualization[C].USA:ACM Press,2004:421-430.

[3] Benjamin B. Bederson. Toolkit Design for Interactive Structured Graphics[J].IEEE Transactions on Software Engineering, 2004(30).

[4] Nahum D. Gershon, Stephen G. Eick.Information Visualization[J].IEEE Computer Graphics and Applications,1997:7-8.

[5] McCormick B H, DeFanti T A, Brown M D, eds.Visualization in Scientific Computing[J].Computer Graphics,1987:21.

[6] Robertson G, Card S K, Mackinlay J D. The Cognitive Co-processor for Interactive User Interfaces[C].Proceedings of the ACM SIGGRAPH symposium on User interface software and technology,1989.

[7] Foley J. Getting There: The Ten Top Problems Left[C].Vision 2000 issue of IEEE Computer Graphics and Applications,2000.

[8] 宋绍成.信息可视化的基本过程与主要研究领域[J].情报科学,2004(1):13-17.

[9] Processing overview[EB/OL]./about/.

[10] Ira Greenberg.Processing:Creative Coding and Computational Art[M].CA:Apress,2007.

[11] Processing Libraries[EB/OL]..reference/libraries/.

[12] Ben F.Visualizing Data[M].CA:O'Reilly Media,2008.

罗万才(1970-),男,湖南汉寿人,工学硕士,工程师,研究方向:计算机应用与自动控制等;

雷君虎(1982-),男,湖南涟源人,工学硕士生,研究方向:信息可视化与软件工程;

李叙庚(1970-),男,湖南新邵人,讲师,研究方向:计算机应用等。