angular 创建服务器_使用D3和Angular创建通用的可视化

angular 创建服务器

我们的世界基于数据。 我们到处收集数据:表格,反馈,学习技术,数据挖掘等。在处理这些数据时,我们需要做的不仅仅是向用户显示数字。 我们需要让他们容易理解数字的含义。

通过结合使用D3数据可视化工具和Angular跨平台应用程序开发平台,我们可以获取该数据并创建可响应动态数据的通用交互式可视化。 这样可以将数据中的最后10%压缩,并将基于数据的应用程序带给用户更高的层次。

什么是D3?

D3.js是一个开放源代码JavaScript库,它提供了对数据驱动的文档对象模型(DOM)的强大操作。 它为您提供了创建您可以想象的任何可视化所需的所有工具。 您将获得用于准备数据的数据转换,用于可视化数据的形状创建,用于将数据转换为不同的代表性布局的布局,随数据和形状变化而呈现视觉效果的转换以及用于交互的强大工具。 它基于Web标准,使您可以转换数据并使用HTML,CSS和SVG赋予其生命。

D3入门很容易。 要创建可视化,我们首先需要一个SVG元素来使用:



   
   
var width = 500 ,
    height = 500 ;
var svg = d3.select ( 'body' )
    .append ( 'svg' )
    .attr ( 'width' , width )
    .attr ( 'height' , height )
    .append ( 'g' )
    .attr ( 'transform' , 'translate(' + width / 2 + ',' + height / 2 + ') rotate(-90 0 0)' ) ;

让我们玩点阳光创造乐趣。 可以将其视为多级甜甜圈图,非常适合显示分层数据。 (它比简单的条形图示例还有趣。)开始之前,我们需要一个用于形状的生成器,在本例中为圆弧。 D3提供了一个生成器来创建您可以自定义的循环扇区。



   
   
var arc = d3.svg.arc ( )
    .startAngle ( function ( d ) {
      return Math.max ( 0 , Math.min ( 2 * Math.PI, xScale ( d.x ) ) ) ;
    } )
    .endAngle ( function ( d ) {
      return Math.max ( 0 , Math.min ( 2 * Math.PI, xScale ( d.x + d.dx ) ) ) ;
    } )
    .innerRadius ( function ( d ) {
      return Math.max ( 0 , yScale ( d.y ) ) ;
    } )
    .outerRadius ( function ( d ) {
      return Math.max ( 0 , yScale ( d.y + d.dy ) ) ;
    } ) ;

现在我们准备好数据了。

常规更新模式

D3提供了一种如何处理数据的模式。 模式是联接输入更新退出 。 这涉及到用于合并新数据和现有数据的数据联接,然后是数据的输入,更新和删除。 在D3中,使用data()append()transition()exit()可以轻松实现该模式。



   
   
/* JOIN new data with old elements */
var gs = svg.selectAll ( 'g' )
  .data ( partition.nodes ( root ) ) ;

/* ENTER new elements present in new data */
var g = gs.enter ( ) .append ( 'g' )
  .on ( 'click' , click )
  .on ( 'mouseover' , mouseoverArc )
  .on ( 'mousemove' , mousemoveArc )
  .on ( 'mouseout' , mouseoutArc ) ;

var path = g.append ( 'path' ) ;

/* UPDATE old elements present in new data */
gs.select ( 'path' )
  .style ( 'fill' , function ( d ) {
      return color ( ( d.co ? d.co : 'base' ) ) ;
  } )
  .transition ( ) .duration ( 500 )
  .attr ( 'd' , arc )
  .each ( function ( d ) {
      this.x0 = d.x;
      this.dx0 = d.dx;
  } ) ;

/* EXIT old elements not present in new data */
gs.exit ( )
  .transition ( )
  .duration ( 500 )
  .style ( 'fill-opacity' , 0 )
  .remove ( ) ;

通过将所有这些和一些数据放在一起,D3将极大地创建我们的旭日形图。 我们甚至设置了提供交互性的功能(请参见代码的ENTER部分)。 但是,如果我们希望该图表与其他图表进行通信该怎么办? 输入角度组件。

什么是角度?

Angular是用于构建移动和桌面Web应用程序的平台。 这是一个用于构建应用程序的自以为是的框架,可为您提供所需的所有组件。 很多事情 ,但是我们将专注于一件:组件。 它们是UI和与我们的D3代码进行交互的Angular代码的基础构建块。

结合我们的力量

增强D3可视化的组件的两个强大部分是输入和输出。 输入允许我们的组件接收数据,这意味着我们可以拥有一个组件来生成旭日形,该组件对于如何获取数据一无所知,但是在输入时仍然会渲染它。输出使我们的组件能够将数据传递回父组件,将事件和数据传递到堆栈中。



   
   
@ Input ( )
sunData: dataPoint [ ] ;

@ Input ( )
filters: string [ ] ;

@ Output ( )
onFilter: EventEmitter < string [ ] > = new EventEmitter < string [ ] > ( ) ;

Angular在其代码中同时使用了装饰器和TypeScript,这为您的代码增加了很多价值和功能。 @Input@Output的属性装饰器定义了我们组件的输入和输出。 通过以这种方式定义属性,Angular编译器会自动创建对该属性的绑定并将其链接。 在输入中,我们可以为数据分配类型。 它通过定义期望的数据来创建更好的代码,这在将组件连接到Angular应用程序中的其他代码时会派上用场。 Angular还可以使用不同的变化检测策略优化组件。 您可以告诉组件仅在推入时进行更新,该组件将查看输入的引用并仅在输入发生更改时进行更新。

在输出中,我们使用EventEmitter 。 这使我们的组件能够向提供给我们组件的功能发送数据。 我们可以将其连接到可视化和click事件。 单击点时,可以将值传递到包含组件的信息,例如DashboardComponent 。 然后, DashboardComponent可以通过过滤数据或查询API来更新数据。 我们的D3 sunburst组件和我们创建的任何其他组件都将看到更改,并且常规更新模式将接管。

面向未来的开源

使用Angular和D3的重要方面之一是它们都是开源的,并提供了来自每个社区的大量示例。 例如,D3有一个很棒的社区,从基本到富有想象力,都有大量图表。 它们可以为您的数据提供灵感,也可以作为起点,帮助您开始创建大创意。

要了解更多信息,请参加2017年9月21日至22日在亚特兰大举行的Connect.Tech上John Niedzwiecki的演讲“ D3 + Angular = Visual Awesomesauce”。

翻译自: https://opensource.com/article/17/8/d3-angular

angular 创建服务器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值