datav.js可视化组件库

作者: admin 分类: javascript 发布时间: 2012-08-25 01:23

大数据时代的到来,对于数据分析以及数据展示都是极大的挑战。数据可视化是应对这一挑战非常有效的方法。但是由于之前数据可视化偏向于学术化和定制 化,不 易于在日常大规模复用,这很大程度上限制了数据可视化的普及。datav.js就是为了降低日常对于可视化方法使用的成本,用数据可视化的方法帮助到更多 的人。

组件库展示页面
组件由社区成员以及浙大CAD&CG可视化与可视分析小组共同开发完成,对于组件有任何建议和问题都可以联系我们,更加欢迎有兴趣的朋友加入我们。目前源代码已在github公开(https://github.com/TBEDP/datavjs)。

联系方式:fahui.jdk@taobao.com    ninglang.wx@taobao.com

 

组件库特点

  • 调用便捷:
    var treemap = new DataV.Treemap("chart2", {});
    treemap.setSource(source);
    treemap.render();
    通过以上三行代码就可以在页面中加入treemap等可视化组件。
  • 浏览器兼容:
    兼容所有浏览器,包括IE6-8,无需flash插件。
  • 数据格式统一:这也就是说同一个数据源可以用于所有可视化方法展示,不需要再为某一种可视化方法对数据格式进行特定的修改。
  • 主题风格保证:针对数据类型专业的配色方案设计,增强数据的可读性。使用一个主题模式,对于所有组件完成配色方案制定,保证所有组件风格统一。
  • 方法类型丰富:

 

源代码地址

 

各个组件使用介绍

 

treemap简介

绘制treemap的javascript代码如下:treemap(树图)通常用来展示层次数据的占比关系。图中的每个矩形代表树的一个节点,大 矩形中的小矩形代表父节点包含的子节点。不同 的节点用不同的颜色加以区分,节点的值用矩形面积的大小表示。 在DataV的treemap中,一次只展现两层节点。第一层的节点用边界较宽的大矩形表示,其中边界较窄的小矩形代表第二层节点。第一层节点下的小矩形 都采用同一类颜色,颜色的深浅代表节点的值的大小。点击第一层节点将把该节点下的两层节点放大显示。点击上方导航条中的链接可以回退到上一层节点。

      //创建treemap对象,包含于id为”chart”的dom结点,宽、高分别为700、500px。
      var treemap = new DataV.Treemap("chart",  {“width”: 700, “height”: 500});
      //设置数据,输入的数据为一个二维数组,也可以为多层json数据。
      treemap.setSource(source); //source is a 2-d array or hierarchy json data
      //绘制
      treemap.render();

创建treemap对象时,第一个参数是包含treemap的dom结点 或该结点的id, 第二个参数是各种选项,其中最重要的宽和高。

treemap数据输入的格式可以是二维数组。例如下面的数组表示2000年4个季度的天数。第1季度下面还列出了1-3月的天数。数组的第 一行为四个固定的字符串”ID”,”name”,”size”和”parentID”。四列数据分别表示层次数据集中各结点的ID,名称,大小和父节点 ID。叶子节点必须有大小,根结点不能有父节点ID。各结点的ID、名称必须要有。

    [
      ["ID", "name", "size", "parentID"],
      [0, “2000”,  ,  ],
      [1, “season1”,  , 0],
      [2, “January”, 31, 1],
      [3, “February”, 29, 1],
      [4, “Match”, 31, 1],
      [5, “season2”, 91, 0],
      [6, “season3”, 92, 0],
      [7, “season4”, 92, 0]
   ]

数据还可以是json格式。每个结点都有“name”,如果是父节点则还有“children”,如果为叶节点则还有“size”。以上数组数据对应的json数据如下:

{
 "name": "2000",
 "children": [
    {
       "name": "season1",
       "children": [
          {"name": "January", "size": 31},
          {"name": "February", "size": 29},
          {"name": "Match", "size": 31}
       ]
     },
    {"name": "season2", "size": 91},
    {"name": "season3", "size": 92},
    {"name": "season4", "size": 92},
  ]
}

以上设置了绘制treemap所需的最重要的属性,调用render()就能完成绘制。

Tree简介

Tree通常用来展示层级数据的父子关系,图中每一个点代表一个节点,由根节点自上向下排列,通过连线表示节点之间的相关性。树图展示最大 的问题就是需要大量的空间,DataV的Tree在限定的空间内可以最大程度的保证节点的完全展示避免重叠。单击节点可以收放改节点的子节点。

绘制Tree的javascript代码如下:

     //创建tree对象,包含于id为”chart”的dom结点,宽、高分别为700、500px。
     var tree = new DataV.Tree("chart", {“width”: 700, “height”: 500});
     //设置数据,输入的数据为一个二维数组。
     tree.setSource(source); //source is a 2-d array
     //绘制
     tree.render();

tree数据输入的格式为二维数组。例如一个简单的树状图节点a有两个子节点b,c。

     [
       ["ID", "name", "size", "parentID"],
       [1,’a’,,],
       [2,’b’,6,1]
       [3,’c’,2,1]
     ]

四列数据分别表示层次数据集中各结点的ID,名称,大小和父节点ID。叶子节点必须有大小,根结点不能有父节点ID。各结点的ID、名称必须要有。 (其中size的属性对于tree本身没有用,是为了这份数据能与treemap通用展示) 除了这四列必须属性,用户可以根据自身的需要追加,所有追加的属性都会成为该节点对应的dom节点信息返回,便于用户调用。 以上设置了绘制tree所需的最重要的属性,调用render()就能完成绘制。

Stream图简介

Stream图通常用来展示多个变量随时间的变化趋势。每个变量用一条色带表示。色带的宽度代表了变量在某时间点处的值或占比的大小。 在DataV的Stream提供了自底向上排列,居中排列,扩展排列,平缓排列4种条带布局方式。鼠标移上条带时,可以高亮响应的条带,并在浮动框中显示 相应变量在相应时间点处的值。 绘制Stream的javascript代码如下:

       //创建stream对象,包含于id为”chart”的dom结点,宽、高分别为700、500px。
       var stream = new DataV.Stream("chart",{“width”: 700, “height”: 500});
       //设置 stream选项,排列方式为“zero”, 排列顺序为“reverse”。
       stream.setOptions({“offset”: “zero”, “order”: “reverse”}); //options
       //设置数据,输入的数据为一个二维数组。
       stream.setSource(source); //source is a 2-d array
       //绘制
       stream.render();

创建stream对象时,第一个参数是包含stream的dom结点 或该结点的id, 第二个参数是各种选项,其中最重要的宽和高。

设置 stream选项时,最重要的是offset和order。offset有4个选项:“zero”(从下往上堆叠),“silhouette”(纵向居中 堆叠),“expand”(计算占比后堆叠),“wiggle”(前后两个时间点间的变化幅度最小,更平缓)。order有2个选项:“default” 和“reverse”。“default”表示个变量以输入数据中的先后顺序从下往上排列;“reverse”表示顺序相反。

stream数据输入的格式为二维数组。例如下面的数组表示2个人在一年4个季度的消费。第一个人在4个季度里消费了1、2、3、9元。第二个人消费了3、4、6、3元。

    [
      [1,2,3,9],
      [3,4,6,3]
    ]

数组中还可以在第一行和第一列加上列名和行名。下面的数据中加入了人名和季节。

    [
      [“”, “season1”, “season2”, “season3”, “season4”],
      [“Wang”, 1, 2, 3, 9],
      [“Li”, 3, 4, 6, 3]
    ]

以上设置了绘制stream所需的最重要的属性,调用render()就能完成绘制。

ScatterplotMatrix散点矩阵图简介

散点矩阵图可以用来展示多维数据中每两个维度之间的关系,多用于数值型数据。

使用: 绘制ScatterplotMatrix的javascript代码如下:

     //创建ScatterplotMatrix对象,包含于id为”chart”的dom结点,宽、高分别为522、522px。
     var scatterplotMatrix = new DataV.ScatterplotMatrix("chart",{"width": 522, "height": 522});
     //设置数据,输入的数据为一个二维数组。
     scatterplotMatrix.setSource(dataSource);
     //设置要显示在X轴上的属性,若不调用该设置函数,缺省情况是显示所有数值属性
     scatterplotMatrix.setDimensionsX(["economy (mpg)", "0-60 mph (s)", "power (hp)"]);
     //设置要显示在Y轴上的属性,若不调用该设置函数,缺省情况是显示所有数值属性
     scatterplotMatrix.setDimensionsY(["economy (mpg)", "0-60 mph (s)", "power (hp)"]);
     //绘制
     scatterplotMatrix.render();

创建ScatterplotMatrix对象时,第一个参数是包含ScatterplotMatrix的dom节点或该节点的id,第二个参数是各种选项,其中最重要的宽和高。

设置ScatterplotMatrix的X轴和Y轴属性时,应分别使用setDimensionsX()与 setDimensionsY()函数,函数的参数是一维的数组,数据中的每个元素分别是每个属性的名称,函数参数不能为空。若不想设置X轴与Y轴显示的 属性,不调用这两个函数即可,该情况下,输入的二维表数据中所有的数值型的属性都会展示。

输入数据: ScatterplotMatrix数据输入的格式为二维数组。数组的第一行是各个属性的名称,第一列是行名。不调用setDimensionsX()与 setDimensionsY()函数时,除了第一列的行名外的所有属性会展示。另外,如果数据有类别信息,将用不同的颜色进行编码。数据样例如下,这些 数据是一些汽车的型号与性能数据:

     [
     [“name”, “economy (mpg)”, “cylinders”, “displacement (cc)”, “power (hp)”]
     [“AMC Ambassador Brougham”, 13, 8, 360, 175]
     [“AMC Ambassador DPL”, 15, 8, 390, 190]
     [“AMC Ambassador SST”, 17, 8, 304, 150]
     ]

交互: ScatterplotMatrix的交互主要有两个: 1.在每个矩形框中可用笔刷选取某些点,被选取的点高亮显示,与这些点对应的在其他矩形框中的点也会高亮显示。 2.在散点矩阵图的左边有代表不同类别的小矩形,当鼠标hover在某个小矩形上时,相应类别的点会高亮显示。

力引导布局网络图(Force)简介

力引导布局网络图表现了不同数据元素之间的二元关系。 绘制Force-directed网络图的javascript代码如下:

     //创建Force对象,包含于id为”chart”的dom结点,宽、高分别为700、500px。
     var net = new DataV.Force("chart",{“width”: 700, “height”: 500});
     //设置net选项,边的目标长度为100。
     net.setOptions({“linkLength”: 100}); //options
     //设置数据,输入的数据为一个二维数组。
     net.setSource(source); //source is a 2-d array
     //绘制
     net.render();

创建Force对象时,第一个参数是包含Force的dom结点 或该结点的id, 第二个参数是各种选项,其中最重要的宽和高。 设置 Force选项时,节点半径值以及边的目标长度以像素为单位。而一些边的长度在运动过程中会受到点之间作用力的影响而改变。

本组件的数据输入采用二维表格式。数据前半部分输入节点信息,后半部分输入边的信息。按照如下格式:

     [
     [Id,Name,Value],
     [0,Li,0],
     [1,Wang,1],
     [2,Zhang,0],
     [Source,Target,Value],
     [0,1,1],
     [1,2,8],
     [2,0,3]
     ]

如上数据表示了三个节点Li,Wang,Zhang的信息,以及节点之间三条边的信息。每一行对应与一个节点或一条边。节点部分在前半部,Id代表 节点编号,Name代表节点的相关信息;Group代表节点分组(可缺省,默认为1)。边部分在后半部,Source与Target代表边的两个节点,无 向图中次序不限;Value代表边的值(可缺省,默认为1)。

以上设置了绘制Force所需的最重要的属性,调用render()就能完成绘制。

Matrix简介

矩阵通常用来展现一组样本的二元关系。图中色块表示对应行列两个样本之间的某种关系值。该组件库中Matrix的特点在于点击矩阵,将会自动通过聚类算法的计算,从而对这组样本进行排序聚类,用户可以看出这个样本集中各个样本之间的主要关系。

绘制Matrix的javascript代码如下:

     //创建Matrix对象,包含于id为”chart”的dom结点,宽、高分别为700、500px。
     var matrix = new DataV. Matrix ("chart", {“width”: 700, “height”: 500});
     //设置数据,输入的数据为一个二维数组。
     matrix.setSource(source); //source is a 2-d array
     //绘制
     matrix.render();

Matrix数据输入的格式为二维数组。例如一个简单的二元关系,a、b、c是一个样本组的三个样本。a与b、c关系分别为1、2,b与c的关系为1,则数据格式应为

     [
       ["a", "b", "c"],
       [0,1,2],
       [1,0,1]
       [2,1,0]
     ]

以上设置了绘制Matrix所需的最重要的属性,调用render()就能完成绘制得到原始的二元关系矩阵,然后单击矩阵,矩阵会根据聚类算法将原始二元关系矩阵调整为聚类矩阵。

Bubble图简介

一、定义 Bubble图组件是一种动态的多维度可视化方法。展示维度包括气泡的x坐标、y坐标、大小、颜色、时间等5个维度。支持数据多属性的同步可视化以及时间动画,方便用户探查数据的差异变化以及演变趋势。

二、特点 单一数据的多维度同时展示; 多条数据的多维度对比展示; 多变量多维度数据的动态展示。

三、使用场景 多属性数据,支持数值、类别属性; 时变数据,存在时间变化的数据。

四、接口说明 1.创建bubble对象时,第一个参数是包含bubble的dom结点 或该结点的id。第二个参数可以设置可选项;(必选) var bubble = new DataV.Bubble(“chart”, {“width”: 800, “height”: 600}); 2.选定数据源,支持CSV格式的二维表数据;(必选) 3.设置可选项,包括气泡的最大最小半径、画布长宽、画布四个边框大小等等;(可选) 4.设置显示的维度,顺序依次是:时间维、关键字维、x坐标维、y坐标维以及颜色维;默认项是数据的前5列,一次对应上述顺序;(推荐) 5.绘制图像和动画;(必选)

     DataV.csv("nations2.csv", function(dataSource) {
         bubble.setSource(dataSource);
     bubble.chooseDimensions(["year", "country", "survival",
     "children", "population", "region"]);
         bubble.render();
     });

五、数据格式说明 Bubble图组件数据输入格式为二维数组。设定第0行为各属性的标识,即维度的名称,每一列为一个维度。支持根据需要选定不同的维度进行可视化。

 year,country,survival,children,population,region
 1989,Japan,0.9935,1.61,121832924,Asia
 1989,Jamaica,0.961,3.01,2352279,America
 1989,Italy,0.99,1.31,56824792,Europe
 1989,Israel,0.988,3.02,4384139,Asia
 1989,Ireland,0.9906,2.06,3530188,Europe
 1989,Iraq,0.9532,6.05,16927393,Arab
 1989,Iran,0.9324,5.15,53437770,Arab
 1989,Indonesia,0.9108,3.23,181197879,Asia

弦图简介

弦图通常用来展示多个节点间的连结关系。 绘制Hierarchical Edge Bundling的javascript代码如下:

     //创建Bundle对象,包含于id为”chart”的dom结点,直径为600px。
     var bundle = new DataV.Bundle("chart", { "diameter": 600});
     //设置数据,输入的数据为一个二维数组。
     bundle.setSource(source); //source is a 2-d array
     //绘制
     bundle.render();

创建Bundle对象时,第一个参数是包含Bundle的dom结点 或该结点的id, 第二个参数是各种选项,其中最重要的圆的直径。

Bundle数据输入的格式为二维表。例如下面的数组共有有一个父节点bundle,他拥有五个子节点a、b、c、d、e,他们的大小分别 为4、3、6、2、4,其中他们相互之间又引用关系。比如,a节点引用了d节点;b节点引用了a、e节点等。整张图正是以这个引用关系来绘制的。如果两个 节点之间又引用关系,那么在图上绘制一条曲线来表达这种关系。

     [
       [name,size,imports],
       [bundle.a,4,[ bundle.d]],
       [bundle.b,3,[ bundle.a, bundle.e]],
       [bundle.c,6,[ bundle.b, bundle.e]],
       [bundle.d,2,[ bundle.a]],
       [bundle.e,4,[ bundle.d]]
    ]

以上设置了绘制Bundle所需的最重要的属性,调用render()就能完成绘制。