用Processing进行数据可视化
用用 Processing进行数据可视化,第进行数据可视化,第 1 部分部分 语言和环境简介语言和环境简介 虽然很多开源项目的初衷都是为现有的应用程序构建替代方案,但是仍有大量的 项目彰显了创新性。Processing 就是其中的一个。Processing 在 2001 年诞生于麻 省理工学院(MIT)的媒体实验室,主创者为 Ben Fry 和 Casey Reas,当然还有来 自 Carnegie Mellon、洛杉矶的加利福尼亚大学以及迈阿密大学等的贡献。 Processing 的最初目标是开发图形的 sketchbook 和环境,用来形象地教授计算机科 学的基础知识。之后,它逐渐演变成了可用于创建图形可视化专业项目的一种环境。 如今,围绕它已经形成了一个专门的社区,致力于构建各种库以供用这种语言和环境 进行动画、可视化、网络编程以及很多其他的应用。在本文中,您会发现 Processing 是一个很棒的进行数据可视化的环境,具有一个简单的接口、一个功能强大的语言以 及一套丰富的用于数据以及应用程序导出的机制。 Processing 运行于 GNU/Linux 以及 Mac OS X 和 Windows 上,并且支持将图 像导出成各种格式。对于动态应用程序,甚至可以将 Processing 应用程序作为 Java applet导出以用在 Web 环境内。 本文将先介绍 Processing IDE,然后再讨论 Processing 语言的第一个层面。之后将 会介绍一些关键的图形原语,最后则探讨几个利用这些原语的应用程序。 ProcessingProcessing 的起源的起源 Processing 最早是一个用于教授计算机编程的简化编程语言。这些理念起源于 MIT Media Lab John Maeda 的 Design By Numbers 项目,目的是通过可视应用程序的 开发来教授编程。虽然它供编程初学者使用,但该项目也针对艺术家及可视化设计者 而设。有关 Processing 及衍生产品的更多信息,请参见 参考资料。 Processing环境环境 第一步是安装 Processing 环境。去到 Processing.org,单击 DownloadDownload ProcessingProcessing 并选择您的操作系统。请注意,本文中的例子使用的是 Processing V1.2.1。下载了压缩文件后,用tar xvfz processing-1.2.1.tgz对其进行 展开。 此外,还需要确保 Java 技术已经可用。在 Ubuntu 上,只需键入sudo apt-get install openjdk-6-jdk。 安装完成后,转到之前解压缩时创建的 processing-1.2.1 目录并尝试键 入./processing。 这应该会弹出 Processing Development Environment(PDE 或 Processing IDE), 如图 1 所示。占此窗口较大的部分是文本编辑器。如果输入图中所示的两行代码,然 后单击 RunRun(左上角的三角形),出现一个窗口,显示您所输入的简单程序(或 Processing 术语所指的 sketch)的结果。单击 StopStop(左上角的方框)退出程序,窗 口消失。 图图 1. PDE1. PDE 和和 ResultsResults 窗口窗口 现在,让我们先来深入研究 Processing 语言,探讨它的主要特性,并且开发一些有 趣的应用程序。 回页首回页首 Processing语言语言 Processing 是用 Java 编程语言写的,并且 Java 语言也是在语言树中最接近 Processing 的。所以,如果您熟悉C或 Java 语言,Processing 将很容易学。并且 在程序如何构造方面,也作了一些简化。Processing 并不包括 Java 语言的一些较为 高级的特性,但这些特性中的很多特性均已集成到了 Processing, 所以您无需了解 它们。 之所以选择 Java 语言是因为 Processing 应用程序被翻译成 Java 代码执行。选择 Java 范型简化了这种翻译并让开发和执行可视化程序变得十分简单和直观。若要对比 Processing 语言和 Java 语言,请参阅 参考资料。 回页首回页首 图形环境图形环境 正如您在 图 1 所见,在 Processing 内进行开发涉及到的是 PDE 和显示窗口。2-D 图形的坐标系如图 2 所示。size关键字以像素为单位定义了显示窗口的大小并且通 常都是 Processing 应用程序内的首要步骤。 图图 2. 2-D2. 2-D 显示窗口的坐标显示窗口的坐标 如图 2 所示,size关键字指定显示窗口的 X 和 Y 坐标。line关键字则会在两个 像素点之间绘制一条线(以x1、y1 to x2、y2的格式)。请注意,超出屏幕边界 (size定义的边界外)画线并非不允许,只是被忽略了而已。 本文无意对此做深入探讨,但size接受可选的第三个参数mode。mode用来定义 要使用的呈现引擎并支持 PDF(直接呈现为 Adobe PDF 文档)、OPENGL(利用 一个可用的 Open-GL 图形适配器)、P3D(为了迅速的 3-D 呈现)等。默认的 是JAVA2D,它最适合于高质量的 2-D 成像。 现在,我们来看一些基本的图形原语,然后再深入探讨几个示例应用程序。 回页首回页首 图形原语图形原语 Processing 包含了大量各种各样的几何形状以及这些形状的控件。本节会简介一些基 本的图形原语。 背景和颜色背景和颜色 background功能被用来设置显示窗口的颜色。此函数可以使用各种不同的参数 (来定义一个灰度值或 Red-Green-Blue [RGB] 颜色)。清单 1 内的代码片段会生 成如 图 3 所示的输出,其中的 cell a)。 清单清单 1.1. 使用使用 BackgroundBackground 函数函数 sizesize100, 100; backgroundbackground 0, 128, 0 ; 绘制像素点绘制像素点 可以使用set函数绘制单个像素点。此函数接受显示窗口内的 x,y 坐标以及作为颜 色的第三个参数。Processing 也有一个类型,称为color,通过它,可以定义用于 某个操作的颜色。在本例中,我们创建了一个颜色实例并用它来设置显示窗口内的某 个像素点(参见清单 2 和 图 3 中的 cell b)。 清单清单 2.2. 设置像素点和颜色设置像素点和颜色 sizesize100, 100; for int x 0 ; x 100 ; x { for int y 0 ; y 100 ; y { color c colorcolor x*2, y*2, 128 ; setsetx, y, c; } } 可以使用get操作来读取显示中的一个给定像素点的颜色。虽然set很简单,但它 不是操做显示的最快方式。要想快速访问,可以使用pi