用Processing进行大数据可视化_第1页
用Processing进行大数据可视化_第2页
用Processing进行大数据可视化_第3页
用Processing进行大数据可视化_第4页
用Processing进行大数据可视化_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、用Processing进行数据可视化,第1局部:语言和环境简介虽然很多开源工程的初衷都是为现有的应用程序构建替代方案,但是仍有大量的项目彰显了创新性。Processing就是其中的一个。Processing在2001年诞生于麻省理 工学院MIR的媒体实验室,主创者为Ben Fry和Casey Reas,当然还有来自Carnegie Mellon、洛杉矶的加利福尼亚大学以及迈阿密大学等的奉献。Processing的最初目标是开发图形的sketchbook和环境,用来形象地教授计算机科学的根底知识。之后,它逐渐演变成了可用于创立图形可视化专业工程的一种环境。如 今,围绕它已经形成了一个专门的社区,

2、致力于构建各种库以供用这种语言和环境进行 动画、可视化、网络编程以及很多其他的应用。在本文中,您会发现Processing是一 个很棒的进行数据可视化的环境,具有一个简单的接口、一个功能强大的语言以及一套丰富的用于数据以及应用程序导出的机制。Processing运行于GNU/Linux ?以及Mac OS X和Windows?上,并且支持将图像 导出成各种格式。对于动态应用程序,甚至可以将Processing应用程序作为Java?applet导出以用在Web环境内。本文将先介绍Processing IDE,然后再讨论Processing语言的第一个层面。之后将 会介绍一些关键的图形原语,最后那

3、么探讨几个利用这些原语的应用程序。Processing的起源Processing最早是一个用于教授计算机编程的简化编程语言。这些理念起源于MITMedia Lab John Maeda的Design By Numbers工程,目的是通过可视应用程序的开 发来教授编程。虽然它供编程初学者使用,但该工程也针对艺术家及可视化设计者而设。有关Processing及衍生产品的更多信息,请参见参考资料。Processing环境第一步是安装Processing环境。去至U P,单击DownloadProcessing并选择您的操作系统。请注意,本文中的例子使用的是Processin

4、gV1.2.1。下载了压缩文件后,用tar xvfz processing-1.2.1.tgz对其进行展开。此外,还需要确保Java技术已经可用。在Ubuntu上,只需键入sudo apt-get installopenjdk-6-jdk。安装完成后,转到之前解压缩时创立的processing-1.2.1目录并尝试键入./processing。这应该会弹出Processing Development Environment PDE或Processing IDE ,如 图1所示。占此窗口较大的局部是文本编辑器。如果输入图中所示的两行代码,然后 单击Run左上角的三角形,出现一个窗口,显示您所输入

5、的简单程序或Processing术语所指的sketch的结果。单击Stop左上角的方框退出程序,窗口消失。图1. PDE和Results窗口现在,让我们先来深入研究Processing语言,探讨它的主要特性,并且开发一些有趣 的应用程序。回页首Processing语言Processing是用Java编程语言写的,并且Java语言也是在语言树中最接近Processing的。所以,如果您熟悉C或Java语言,Processing将很容易学。并 且在程序如何构造方面,也作了一些简化。Processing并不包括Java语言的一些较为高级的特性,但这些特性中的很多特性均已集成到了Processing

6、,所以您无需了解 它们。之所以选择Java语言是因为Processing应用程序被翻译成Java代码执行。选择Java范型简化了这种翻译并让开发和执行可视化程序变得十分简单和直观。 假设要比照Processing语言和Java语言,请参阅参考资料。回页首图形环境正如您在 图1所见,在Processing内进行开发涉及到的是PDE和显示窗口。2-D图形的坐标系如图2所示。size关键字以像素为单位定义了显示窗口的大小并且通 常都是Processing应用程序内的首要步骤。图2. 2-D显示窗口的坐标A9Texteditor winctowDisplay window如图2所不size关键字指定显

7、不窗口的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包含了大量各种各样的几何形状以及这些形状的控

8、件。本节会简介一些基 本的图形原语。背景和颜色background功能被用来设置显示窗口的颜色。此函数可以使用各种不同的参数来定义一个灰度值或Red-Green-Blue RGB颜色。清单1内的代码片段会生成如囹3所示的输出,其中的cell a 。清单1.使用Background函数size (100, 100);background ( 0, 128, 0 );绘制像素点可以使用set函数绘制单个像素点。此函数接受显示窗口内的x,y坐标以及作为颜色的第三个参数。Processing也有一个类型,称为color ,通过它,可以定义用于某个操作的颜色。在本例中,我们创立了一个颜色实例并用它来设置

9、显示窗口内的某个像 素点参见清单2和图3中的cell b 。清单2.设置像素点和颜色size (100, 100);for (int x = 0 ; x 100 ; x+) (for (int y = 0 ; y 100 ; y+) (color c = color ( x*2, y*2, 128 );set (x, y, c);)可以使用get操作来读取显示中的一个给定像素点的颜色。虽然set很简单,但它不是操做显示的最快方式。要想快速访问,可以使用pixels数组(与loadPixels和updatePixels函数一致)。绘制形状在Processing内使用单个函数绘制形状十分简单。要设

10、置在绘制形状时使用何种颜色,可以利用stroke函数。此函数可接受一个单独的灰度参数或三个RGB参数。此外,还可以用fill命令定义这个形状的填充色。清单3显示了如何绘制线、矩形、圆(使用椭圆)及椭圆。line函数接受四个参数,代表的是要在其间绘制线条的点。rect函数可绘制一个矩形,并且前两个点定义位置,而后面两个点那么分别定义宽度和高度。ellipse函数也接受四个参数,分别定义位置和宽/高度。当宽和高相等时,就是一个圆形。还可以使用ellipseMode函数定制椭圆,它指定x,y位置是否代表了椭圆的角(CORNE皿中心(CENTER。参见 图 支中的cellC。清单3.线和形状size

11、(100, 100);stroke (0, 128, 0);line (10, 10, 90, 90);fill (20, 50, 150);rect (30, 30, 60, 40);fill (190, 0, 30);ellipse (30, 70, 20, 20);fill (0, 150, 90);ellipse (70, 30, 30, 20);绘制四边形在Processing内使用quad可以很容易地绘制有四个边的多边形。四边形接受八个参数,代表的是这个四边形的四个顶点。清单4内的例如创立了10个随机的四边形(其中这些点必须是顺时针或逆时针顺序。此代码还会为每个四边形创立一个随机的

12、灰度。清单4.绘制四边形size (100, 100);for (int i = 0 ; i 4 Oil 5ftu|iC) 1112 E SO): f ir !PPIBT fort -tB.wlw1;做是为了防止更改对空间的破坏。此空间然后会成为一个显示空间被显示的东西 和一个计算空间规那么的应用。这些空间按每次生成对调。从很大程度上讲,这个应用程序使用了极少的Processing图形关键字。为空间定义的颜色只有几个:stroke用来更改颜色,point用于绘制像素点。使用Processing模型,draw函数调用update以应用规那么;返回后,draw将这个更新了的空间发到显示窗口。清单5

13、.元胞自动机森林火灾模型int pix = new int2400400;int toDraw = 0;int tree = 0;int burningTree = 1;int emptySite = 2;int x_limit = 400;int y_limit = 400;color brown = color(80, 50, 10); / browncolor red =color (255, 0, 0); / red;color green = color(0, 255, 0); / greenfloat pGrowth = 0.01;float pBurn = 0.00006;boo

14、lean prob( float p )if ( random (0, 1) p) return true;else return false;void setup ()size (x_limit, y_limit);frameRate (60);/* Initialize to all empty sites */for (int x = 0 ; x x_limit ; x+) for (int y = 0 ; y y_limit ; y+) pixtoDrawxy = emptySite;)void draw()(update();for (int x = 0 ; x x_limit ;

15、x+) (for (int y = 0 ; y y_limit ; y+) (if (pixtoDrawxy = tree) (stroke ( green );) else if (pixtoDrawxy = burningTree) (stroke ( red );) else stroke ( brown );point ( x, y );)toDraw = (toDraw = 0) ? 1 : 0;)void update()(int x, y, dx, dy, cell, chg, burningTreeCount;int toCompute = (toDraw = 0) ? 1 :

16、 0;for (x = 1 ; x x_limit-1 ; x+) (for (y = 1 ; y y_limit-1 ; y+) (cell = pixtoDrawxy;/ Survey area for burning treesburningTreeCount = 0;for (dx = -1 ; dx 2 ; dx+) (for (dy = -1 ; dy 0) chg = burningTree;else chg = cell;pixtoComputexy = chg;)图6显示了这个元胞自动机森林火灾模型的迭代,跳跃恰当,很好地显示了所设规那么的效果。Time 0包含的只有树木在其

17、中生长的空间。在time 40,就可以开始看到大 火在燃烧并最终占据整个空间。在大约time 100,树木生长更为明显,但在time 120时,起火更多,过程循环。图6.元胞自动机森林火灾模型的输出回页首易染/感染/免疫模型易染/感染/免疫模型模拟的是疾病在医院内的蔓延。与森林火灾模型类似,SIR也是通过一套简单规那么实现的,只不过添加了一些复杂性和有趣的行为。在这个模型内,有一个由病人占据的病床组成的网格。在time 0,所有病人都是某一种新疾病的易染人群,这意味着这些病人从未患过这种疾病,因此才有可能被感染。如果在某个病人的东 /南/西/北的四个邻居中有一个患了这种疾病,那么该病人受感染的

18、可能性为tauo一个受感染的病人的患病时间为K天,在此期间病人有感染其他病人的可能性。在K天后,该病人康复并有了对这种疾病的免疫力。正如之前的例子所示,setup函数先初始化这个医院以及所有易染病人,只有最中心 的这个病人是已经患病的。在该实现内,0是易染病人,1-K是感染病人,-1是免疫病人。draw函数将这种几何分布发到显示窗口,update实施这些SIR规那么。与之前一样,可以用一个3D数组保存当前的这些几何分布。清单6给出了此代码。清单6. Processing内的SIR模型int beds = new int2200200;int toDraw = 0;int x_limit = 2

19、00;int y_limit = 200;color brown = color (80, 50, 10); / browncolor red = color (255, 0, 0); / red;color green = color (0, 255, 0); / greenint susceptible = 0;int recovered = -1;float tau = 0.2;int k = 4;boolean prob( float p )if ( random (0, 1) p) return true;else return false;void setup ()size (x_

20、limit, y_limit);frameRate (50);for (int x = 0 ; x x_limit ; x+) for (int y = 0 ; y y_limit ; y+) bedstoDrawxy = susceptible;bedstoDraw100100 = 1;void draw()update();for (int x = 0 ; x x_limit ; x+) for (int y = 0 ; y y_limit ; y+) (if (bedstoDrawxy = recovered)stroke ( brown );else if (bedstoDrawxy = susceptible)stroke ( green );else if (bedstoDrawxy 0) & (patient k) return true;return false;)void update

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论