`
yangsq
  • 浏览: 182066 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Use prefuse with database

阅读更多

prefuse是一个非常不错的开源可视化项目,尤其是用在social network/complex network上,个人感觉要比jung好。不过可惜的是,prefuse的user manual还在建设中,并且google resource也少得可怜。好在开源提供了源码,只好看源码了,呵呵。

prefuse user manual上提供了一个简单的例子,这个例子的数据来自一个符合GraphML标准的xml文件(socialnet.xml),大致内容如下:

xml 代码
  1. <!---->xml version="1.0" encoding="UTF-8"?>  
  2. <!---->  
  3. <graphml xmlns="http://graphml.graphdrawing.org/xmlns">  
  4.   <graph edgedefault="undirected">  
  5.     
  6.     <!---->  
  7.     <key id="name" for="node" attr.name="name" attr.type="string"/>  
  8.     <key id="gender" for="node" attr.name="gender" attr.type="string"/>  
  9.      
  10.     <!---->     
  11.     <node id="1">  
  12.      <data key="name">Jeffdata>  
  13.      <data key="gender">Mdata>  
  14.      node>  
  15.     <node id="2">  
  16.      <data key="name">Eddata>  
  17.      <data key="gender">Mdata>  
  18.     node>  
  19.     ...........................   
  20.     <edge source="1" target="2">edge>  
  21.     <edge source="1" target="3">edge>  
  22.     ............................   
  23.   graph>  
  24. graphml>  

大致就是这个样子,程序也比较简单。但是不可能在想要可视化某个社群网络的时候,数据都来自xml,其实大部分还是来自数据库的。prefuse支持从数据库直接获取数据。不过它的user manual上没讲。只好自己探索。

先建立一个在mysql上测试数据库。一个代表节点,一个代表边。

sql 代码
  1. DROP TABLE IF EXISTS `test`.`node`;   
  2. CREATE TABLE  `test`.`node` (   
  3.   `id` int(10) unsigned NOT NULL auto_increment,   
  4.   `namevarchar(45) NOT NULL,   
  5.   `gender` varchar(45) NOT NULL,   
  6.   PRIMARY KEY  (`id`)   
  7. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;   
  8.   
  9. DROP TABLE IF EXISTS `test`.`edge`;   
  10. CREATE TABLE  `test`.`edge` (   
  11.   `id` int(10) unsigned NOT NULL auto_increment,   
  12.   `sid` int(10) unsigned NOT NULL,   
  13.   `tid` int(10) unsigned NOT NULL,   
  14.   PRIMARY KEY  (`id`)   
  15. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;  

接下来随便在两个表中插入几条数据,需要注意的是edge表中,sid和tid一定要在node表中存在(即node表中有id与其对应),否则prefuse在读取时会抛出异常。

接下来是程序了:

java 代码
  1. public class TestMysql {   
  2.     public static final String driverName   = "com.mysql.jdbc.Driver";   
  3.     public static final String dbURL        = "jdbc:mysql://localhost:3306/test";   
  4.     public static final String userName     = "root";   
  5.     public static final String userPwd      = "123456";   
  6.        
  7.     public static void main(String[] args) {   
  8.         DatabaseDataSource datasrc = null;   
  9.            
  10.         try {   
  11.             //get database connection   
  12.             datasrc = ConnectionFactory.getDatabaseConnection(   
  13.                     driverName, dbURL, userName, userPwd);   
  14.                
  15.             //create a table of data   
  16.             Table nodes = datasrc.getData("select * from node");   
  17.             Table edges = datasrc.getData("select * from edge");   
  18.                
  19.             Graph graph = new Graph(nodes, edges, false"id""sid""tid");   
  20.                
  21.             Visualization vis = new Visualization();   
  22.             vis.add("graph", graph);   
  23.                
  24.             LabelRenderer r = new LabelRenderer("name");   
  25.             r.setRoundedCorner(88);   
  26.             vis.setRendererFactory(new DefaultRendererFactory(r));   
  27.                
  28.             int[] palette = new int[] {   
  29.                     ColorLib.rgb(255,180,180), ColorLib.rgb(190,190,255)   
  30.             };   
  31.                
  32.             DataColorAction fill = new DataColorAction("graph.nodes""gender",   
  33.                     Constants.NOMINAL, VisualItem.FILLCOLOR, palette);   
  34.             ColorAction textColor = new ColorAction("graph.nodes",   
  35.                     VisualItem.TEXTCOLOR, ColorLib.gray(0));   
  36.             ColorAction edgesColor = new ColorAction("graph.edges",   
  37.                     VisualItem.STROKECOLOR, ColorLib.gray(200));   
  38.                
  39.             ActionList color = new ActionList();   
  40.             color.add(fill);   
  41.             color.add(textColor);   
  42.             color.add(edgesColor);   
  43.                
  44.             ActionList layout = new ActionList(Activity.INFINITY);   
  45.             layout.add(new ForceDirectedLayout("graph"));   
  46.             layout.add(new RepaintAction());   
  47.                
  48.             vis.putAction("color", color);   
  49.             vis.putAction("layout", layout);   
  50.                
  51.             Display d = new Display(vis);   
  52.             d.setSize(720500);   
  53.             d.addControlListener(new DragControl());   
  54.             d.addControlListener(new PanControl());   
  55.             d.addControlListener(new ZoomControl());   
  56.             d.addControlListener(new NeighborHighlightControl());   
  57.                
  58.             JFrame frame = new JFrame("haha");   
  59.             frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   
  60.             frame.setSize(800600);   
  61.             frame.add(d);   
  62.             frame.setVisible(true);   
  63.                
  64.             vis.run("color");   
  65.             vis.run("layout");   
  66.         } catch (Exception e) {   
  67.             e.printStackTrace();   
  68.         }   
  69.     }  

第19行:生成一个graph对象,这是可视化的关键。graph对象可以有多种生成方式,光是从数据库生成(也可以说是从table生成,应为prefuse从数据库中取出的都封装成Table)就有好几个方式。不过推荐本例的生成方式,提供的信息越多越可以更精确的描述自己。参数意义分别是:节点的Table,边的Table,是否是有向(true有,false无),节点的主键,边中代表源的列名(与edge表中对应),边中代表目标的列名(与edge表中对应)。

其他的就没得说了,和user manual上差不多。个人认为prefuse的另外一个优点是final类比较少,也就是说可扩展性比较强。例如53-56行添加的动作(在prefuse.controls包),我们就可以随意生成自己的Control。

分享到:
评论
1 楼 Liverpool_IT 2012-04-23  
prefuse怎么画有向图啊,就是边带箭头的那种,QQ 1123104980

相关推荐

    prefuse源码 初解 prefuse的英文文档

    Prefuse是一个强大的图形编程框架,主要用于数据可视化。它是由Java编写,提供了丰富的工具和库,使得开发者能够构建交互式、动态的数据展示应用。这个“prefuse源码 初解 prefuse的英文文档”可能包含对Prefuse框架...

    Prefuse-master.zip

    Prefuse 是一个强大的Java库,专门用于创建交互式信息可视化应用程序。这个库为开发者提供了一个灵活的框架,让他们能够设计出复杂且具有高度用户交互性的数据可视化项目。"Prefuse-master.zip" 包含了Prefuse的核心...

    prefuse-beta版工具包

    Prefuse是一款强大的开源Java库,专门用于数据可视化。它的全称是“Prefuse Visual Toolkit”,在数据可视化的领域中有着广泛的应用。这个“prefuse-beta版工具包”提供了 Prefuse 的一个早期版本,可能包含了该工具...

    prefuse树形菜单

    "Prefuse树形菜单"是一种基于Prefuse库的Java Applet程序开发技术,主要用于构建具有动态视觉效果的交互式树状数据结构展示。Prefuse是一个强大的可视化工具包,由Java编写,它为创建复杂的、数据驱动的用户界面提供...

    prefuse.rar

    Prefuse是一款强大的Java图形可视化库,它为开发者提供了一种灵活且高效的方式来创建各种复杂的图形界面,包括但不限于网络图、树图、表格以及各种自定义的视觉表示。这个rar压缩包包含了Prefuse的核心组件和相关...

    prefuse 初解

    ### Prefuse初探 Prefuse是一款强大的Java可视化编程框架,主要应用于数据可视化领域。通过本文档,我们将深入了解Prefuse的基本概念、使用方法及其核心组件。 #### 一、Prefuse简介 Prefuse是一款专为Java开发者...

    prefuse软件框架

    Prefuse 是一个可扩展的软件框架,它可以帮助使用java语言的开发者开发交互的信息可视化程序。它可以用来建立独立的应用程序,在大型应用中的可视化组件和web applets。Prefuse的目标是1简化处理数据过程的开发,2...

    prefuse图形化软件包源码

    prefuse是数据图形化展示应用编程的不二选择,利用prefuse,你可以将抽象的数据表示为图形、动画、网表等直观的形式,目前在svn数据挖掘和研究中极为有效,使用prefuse制作的比较好的产品有veszter和sna等

    prefuse初解

    ### Prefuse初解 #### 一、Prefuse简介与应用场景 Prefuse是一个强大的开源Java库,主要用于实现数据可视化。它可以广泛应用于商业和非商业场景,为用户提供了一个灵活且高效的工具来展示复杂的数据集。相较于传统...

    the prefuse visualization toolkit

    《Prefuse Visualization Toolkit:强大的数据可视化工具》 Prefuse Visualization Toolkit(PVT)是一个开源的Java库,专门用于创建交互式的数据可视化应用。这个工具包为开发者提供了丰富的功能,能够帮助他们将...

    prefuse API doc

    prefuse API doc prefuse自从2011年后就没更新了,截止2017-11-24

    prefuse打包好的jar文件

    prefuse的jar文件,打包好方便使用

    prefuse.flare

    prefuse是一个非常不错的开源可视化项目,尤其是用在social network/complex network上,个人感觉要比jung好。不过可惜的是,prefuse的user manual还在建设中,并且google resource也少得可怜。好在开源提供了源码,...

    prefuse-javadoc

    prefuse是数据图形化展示应用编程的不二选择,利用prefuse,你可以将抽象的数据表示为图形、动画、网表等直观的形式,在svn数据挖掘和研究中极为有效,本附件为prefuse的javadoc,内容非常详实。

    prefuse网站镜像20151223

    官网从2011年以后就没更新过,截止到2017-11-24。 网站常被墙,备用吧。

    prefuse beta (release 2007.10.21) - source zip (.zip), 4.1mb

    A zip file containing the prefuse toolkit source code and a pre-compiled version of the toolkit (prefuse.jar). The code can easily be imported as an Eclipse project or built using the provided build ...

    Prefuse-master.zip_DEMO_prefuse源码_数据可视化

    Prefuse是一款强大的Java库,专为数据可视化设计。它的核心理念是提供一个灵活、可扩展的框架,使得开发者能够创建出交互式的数据可视化应用。在"Prefuse-master.zip"这个压缩包中,包含了Prefuse项目的源代码,这...

    prefuse作者写的一篇关于prefuse的介绍文章

    ### 关于Prefuse的知识点 #### 一、Prefuse简介 Prefuse是一个用于构建高度交互式信息可视化的工具包,由加州大学伯克利分校计算机科学分部的Jeffrey Heer、帕洛阿尔托研究中心的Stuart K. Card以及华盛顿大学...

    prefuse的简单教程

    Prefuse 是一个强大的 Java 库,专为数据可视化设计,尤其适合绘制社交网络关系图。它提供了一套灵活的框架,能够将结构化和非结构化的数据转化为交互式的视觉展示。 Prefuse 支持多种类型的数据,包括层次结构(如...

    prefuse.jar

    基于Java的可交互图形显示包,提供和数据库、XML以及Graphml交互的接口。

Global site tag (gtag.js) - Google Analytics