<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Yanyan Wang</title>
    <description>The latest articles on DEV Community by Yanyan Wang (@yanyanwang).</description>
    <link>https://dev.to/yanyanwang</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F337653%2Fc93837a3-c0eb-408d-a741-b89c20145d14.jpeg</url>
      <title>DEV Community: Yanyan Wang</title>
      <link>https://dev.to/yanyanwang</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/yanyanwang"/>
    <language>en</language>
    <item>
      <title>G6 4.0: More Progress for Easier Graph Visual Analysis</title>
      <dc:creator>Yanyan Wang</dc:creator>
      <pubDate>Thu, 03 Dec 2020 06:20:00 +0000</pubDate>
      <link>https://dev.to/yanyanwang/g6-4-0-more-progress-for-easier-graph-visual-analysis-4i8j</link>
      <guid>https://dev.to/yanyanwang/g6-4-0-more-progress-for-easier-graph-visual-analysis-4i8j</guid>
      <description>&lt;h2&gt;
  
  
  What is G6
&lt;/h2&gt;

&lt;p&gt;AntV G6 is an open source engine for graph visualization and analysis, which focuses on relational data. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Welcome to star our GitHub: &lt;a href="https://github.com/antvis/G6" rel="noopener noreferrer"&gt;https://github.com/antvis/G6&lt;/a&gt;&lt;br&gt;
Our website: &lt;a href="https://g6.antv.vision/en/" rel="noopener noreferrer"&gt;https://g6.antv.vision/en/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;With G6, you can use your unlimited imagination to create cool graph visualizations. Outstanding cases:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://g6.antv.vision/en/examples/case/decisionTree" rel="noopener noreferrer"&gt;Interactive Decision Tree&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://medium.com/antv/graph-shows-what-do-people-like-to-say-at-christmas-85b87ba87f50" rel="noopener noreferrer"&gt;Christmas Words&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://medium.com/antv/fire-population-graph-of-australia-cities-6079fa3278d0" rel="noopener noreferrer"&gt;Fire &amp;amp; Population Graph of Australia Cities&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://g6.antv.vision/en/examples/case/edgeBundling#index" rel="noopener noreferrer"&gt;American Airlines with Edge Bundling&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://g6.antv.vision/en/examples/case/metroLines" rel="noopener noreferrer"&gt;Animated Metro Map&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F1bdocgsu2bowh94bqok4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F1bdocgsu2bowh94bqok4.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What did G6 do in 2020
&lt;/h2&gt;

&lt;p&gt;G6 4.0, in addition to the continued enhancement of functions and the continuous polishing of detailed experience, it also provides a graph visualization design system, intelligent layout prediction, and a visual analysis solution for large scale graph data.&lt;/p&gt;

&lt;h3&gt;
  
  
  Graph Vis Design System
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Visit「&lt;a href="https://g6.antv.vision/en/docs/design/overview" rel="noopener noreferrer"&gt;Here&lt;/a&gt;」for Detail&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A graph visual analysis application with a good experience must be carefully designed. From the  framework of a product or an application, to the user's interacting process, interface layout, and to the visual presentation of the graph, every detail needs to be carefully considered and designed. Based on a large number of business practices in different scenarios, the AntV design team meticulously summarized design guidelines suitable for the field of graph visualization. This guide organizes the content with the classic ETCG design framework, systematically introduces graph visualization design, best practices and thinking behind it. Hope to bring more in-depth thinking to the majority of graph visualization designers.&lt;/p&gt;

&lt;p&gt;From the perspective of graph analysis, an application usually goes through the following stages in order to transform the data source into valuable information for users.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Foyezt9n5d5xipjs2v3bq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Foyezt9n5d5xipjs2v3bq.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Quoted from "Graph Analysis and Visualization"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Have explored the characteristics of the analysis scene according to the graph applications, we divide the analysis mode of the graph analysis product or application into three types: with clear purpose, no clear purpose, and special scenario. The interfaces for different analysis modes will not be the same. As well as the user's using process. It is true that for a full-featured graph analysis product three analysis modes may be available at the same time, resulting in an exponential increase in interface complexity.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fp86rw26y5qu95geg5u87.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fp86rw26y5qu95geg5u87.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In terms of visual style, we provide two themes: default (light) and dark, to meet different scenarios.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fs7mifcalo4fq6eayncsx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fs7mifcalo4fq6eayncsx.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  AI Layout Prediction
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;For more info about the prediction engine @antv/vis-predict-engine , please visit「 &lt;a href="https://g6.antv.vision/en/docs/manual/middle/layout/ai-layout" rel="noopener noreferrer"&gt;G6 AI Layout Prediction Docs&lt;/a&gt;」.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In most graph visual analysis applications, data is obtained from dynamic queries. For developers, it is a big challenge to choose a proper layout for the dataset without known features. Some applications leave the layout configuration problem to the end user, that is to say, allow the end users to choose the layout and adjust the parameters by themself. But it is obviously inefficient, and more difficult for end users without prior knowledge to choose a reasonable layout. For these cases, intelligent layout prediction helps. As shown below, on a medical and health dataset, the intelligent layout prediction engine shows that the "Force" layout is the best. And the comparison experiments also meets expectations.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fyd4gxqkwshqplsyvlrxj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fyd4gxqkwshqplsyvlrxj.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  GPU Parallel Computing for Layout
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;「&lt;a href="https://g6.antv.vision/en/examples/net/gpuLayout#gForceComplexData" rel="noopener noreferrer"&gt;Demo&lt;/a&gt;」&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;As the scale of data increases, algorithm computing has become a major bottleneck for front-end applications, where the layouts are frequently used algorithms. A long calculation process may cause page blockage or a long time blank screen if the layout on large graph is calculated by the front-end. G6 4.0 launched GPU accelerated graph layouts, which enhance the performance of layout computing by tens or even hundreds of times. The following table shows the two GPU-supported layouts currently implemented in G6:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GForce: implements the classic force-oriented layout, supports nodes' masses and central forces, etc.「&lt;a href="https://g6.antv.vision/en/examples/net/gpuLayout#gForceComplexData" rel="noopener noreferrer"&gt;Demo&lt;/a&gt;」;&lt;/li&gt;
&lt;li&gt;Fruchterman: another force-directed layout, which is more compact than GForce layout.「&lt;a href="https://g6.antv.vision/en/examples/net/gpuLayout#fruchtermanComplexData" rel="noopener noreferrer"&gt;Demo&lt;/a&gt;」.
As shown in the table below, on small-scale datasets, the GPU layout has no advantage, and may even be inferior to the CPU layout. However, it is very significant on the acceleration effect is very significant on medium or large-scale datasets.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F8tn14vva4rknc7is0hv4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F8tn14vva4rknc7is0hv4.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Visual Analysis of Large Scale Data
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;「&lt;a href="https://g6.antv.vision/en/largegraph" rel="noopener noreferrer"&gt;A Simplified Demo&lt;/a&gt;」&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When a query returns a large scale data such as one hundred thousand or one million, developers will face two problems: how to render the massive data and how to obtain insights from it.&lt;/p&gt;

&lt;p&gt;Canvas rendering has a certain limit on the number of primitives. The maximum number of primitives that G6 can render currently is about 60,000-70,000. If smooth interaction is required, it is recommended to control the number of primitives below 30,000. For large scale data, AntV Graph Visualization Team provides a set of large graph visualization solution that can process large-scale graph data through rendering optimization, interface conventions, data aggregation, and node clustering.&lt;/p&gt;

&lt;p&gt;In order to gain insights from large scale data, the first important thing is visual clutter reducton, and ensure the effective transmission of visual information meanwhile; secondly, providing a good layout (with GPU acceleration) also helps a lot. In addition, cooperating with the visual analysis components, user could do more in-depth exploration and analysis.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fvhnw2tggy2n5qg6bwtau.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fvhnw2tggy2n5qg6bwtau.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Interactive Document
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;「&lt;a href="https://g6.antv.vision/en/graphmarker" rel="noopener noreferrer"&gt;Link&lt;/a&gt;」&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;With the continuous improvement of G6 functions, the number of G6 documents is also increasing. It is too difficult for users who are not familiar with G6 to find what they need in the vast docs. In order to help the users get familiar with G6 quickly, the interactive document GraphMaker came into being.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F2psjuwijsipmfpo2athb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F2psjuwijsipmfpo2athb.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Easy-to-use Analysis Components
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fkfzeqx434wattt29kyqj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fkfzeqx434wattt29kyqj.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In graph visual analysis applications, the queried data's scale might be very large. Even after node aggregation, edge aggregation, and node grouping, which may lead to a messy "hair ball", making the graph unreadable, incomprehensible, and non-interactive. The original intention of visualization is lost: to deliver information to users intuitively and efficiently. In this case, analysis components such as Fisheye Lens and Edge Filter Lens can be useful.&lt;/p&gt;

&lt;h4&gt;
  
  
  Fisheye
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;「&lt;a href="https://g6.antv.vision/en/examples/tool/fisheye/" rel="noopener noreferrer"&gt;Demo&lt;/a&gt;」&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Fisheye is a plug-in designed for the exploration with Focus + Context, which ensures that the context and the relationship between the context and the focus area are not lost while magnifying the area of interest compares to pan. Now, G6 makes Fisheye even better! We have added more configurations to Fisheye, allowing end users to dynamically change Fisheye's coverage and magnification during the process of using Fisheye, truly allowing users to explore whatever they want.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fxyx93gdj1rg2qbjje52t.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fxyx93gdj1rg2qbjje52t.gif" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Edge Filter Lens
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;「&lt;a href="https://g6.antv.vision/en/examples/tool/edgeFilterLens" rel="noopener noreferrer"&gt;Demo&lt;/a&gt;」&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When there are a large number of edges in the graph, the edge overlappings and crossings make it extremely difficult for users to observe. To alleviate such problems, G6 provides edge filter plug-ins. Through a simple configuration, the edges that the user pays attention to can be filtered locally from the complex tangled edges.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F55fx4bq89ffgqjkzlp9x.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F55fx4bq89ffgqjkzlp9x.gif" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  TimeBar
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;「&lt;a href="https://g6.antv.vision/en/examples/tool/timebar" rel="noopener noreferrer"&gt;Demo&lt;/a&gt;」&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The main purpose of graph visual analysis applications is to assist users in exploring, analyzing, and discovering potential graph features. In order to make some patterns sufficiently convincing, it is necessary for a the visualization applications that have the ability to retrospectively explore the discovering process, which means allows any user to reproduce the patterns in accordance with a specific process. The backtracking of graph patterns is a kind of time series analysis of graphs, where the time axis (TimeBar) is a very important component. To facilitate developers to quickly build graph time series analysis applications, G6 provides the TimeBar component.&lt;/p&gt;

&lt;p&gt;There are three types of TimeBar in G6:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;TimeBar with Chart Background;&lt;/li&gt;
&lt;li&gt;Simple TimeBar;&lt;/li&gt;
&lt;li&gt;Scale TimeBar.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All the three TimeBars above support basic functions such as range/single time point play and playback, fast forward, rewind, and speed adjustment. Among the three timebars, the trend chart TimeBar and the simple TimeBar support switching between single time point and a range of time.&lt;/p&gt;

&lt;h5&gt;
  
  
  TimeBar with Chart Background
&lt;/h5&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fkc4786gjdkwsg6gyqenq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fkc4786gjdkwsg6gyqenq.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In addition to the basic functions of TimeBar selection, playback, fast forward, and rewind, the background of the TimeBar can be configured with a bar chart, line chart, and area chart to indicate the trend of data changes.&lt;/p&gt;

&lt;p&gt;In more complex scenarios, mixed charts in the background is considerable. G6's TimeBar with mixed charts background is coming soon.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Flhw4w84xvfh7jw24m9y6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Flhw4w84xvfh7jw24m9y6.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h5&gt;
  
  
  Simple TimeBar
&lt;/h5&gt;

&lt;p&gt;In the case of limited screen space, you can choose the simple version of the TimeBar component:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Ftnse8onh159fh8krlcwx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Ftnse8onh159fh8krlcwx.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h5&gt;
  
  
  Scale TimeBar
&lt;/h5&gt;

&lt;p&gt;The Scale TimeBar is designed for discrete time points. Each small square on the Scale TimeBar represents a time point. Users could click to select a specific point, or drag to select a range.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fyavfpcii06439wl090me.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fyavfpcii06439wl090me.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Node Combo and BubbleSet
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;「&lt;a href="https://g6.antv.vision/en/examples/item/customCombo#cRect" rel="noopener noreferrer"&gt;Node Combo Demo&lt;/a&gt;」&lt;br&gt;
「&lt;a href="https://g6.antv.vision/en/examples/interaction/hull#hull" rel="noopener noreferrer"&gt;BubbleSet Demo&lt;/a&gt;」&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In the process of exploratory analysis of graph visual analysis applications, for a group of nodes that are found to be suspicious and worthy of attention, they are often grouped together for subsequent analysis. For example, closely connected groups in a capital trading network are likely to be suspected of crimes. The node Combo in G6 can be used to meet these demand. Combo manages a group of nodes of the same cluster, allowing users to analyze from a higher dimension. And with user interactions, the node distribution and the hierarchy structure of combos can be adjusted in real time. Creating and dissolving Combos are also available. That is a good way to assist data analysts to divide and classify suspicious node clusters.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F17klw29at01fmjwf0png.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F17klw29at01fmjwf0png.gif" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In graph visual analysis applications, when users need to quickly mark groups and communities, they can use the BubbleSet provided by G6. Sometimes, the nodes of the same group may be distributed in different areas on the screen. In this case, BubbleSet could automatically "bypass" other nodes for precise marking.&lt;br&gt;
Combo and BubbleSet are similar to a certain extent. The main difference is that the purpose of the BubbleSet is node marking, which does not change the actual hierarchy of data structure. But the Combo and nodes are some kind similar to a file system where the Combos are dictionary and the nodes are the fils. So the Combo could has multi-layer nesting structure which is not supported by the BubbleSet.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F3j2yt62r8qu5jv1ds4e8.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F3j2yt62r8qu5jv1ds4e8.gif" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F5y0ktrezgqnrszrkgc7e.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F5y0ktrezgqnrszrkgc7e.gif" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Graph Algorithms
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;「&lt;a href="https://g6.antv.vision/en/examples/algorithm/algoDemos#shortestPath" rel="noopener noreferrer"&gt;Shortest Path Demo&lt;/a&gt;」&lt;br&gt;
「&lt;a href="https://g6.antv.vision/en/examples/algorithm/algoDemos#labelPropagation" rel="noopener noreferrer"&gt;LP Clustering Demo&lt;/a&gt;」&lt;br&gt;
「&lt;a href="https://g6.antv.vision/en/examples/algorithm/algoDemos#louvain" rel="noopener noreferrer"&gt;LOUVAIN Clustering Demo&lt;/a&gt;」&lt;br&gt;
「&lt;a href="https://g6.antv.vision/en/examples/algorithm/algoDemos#colorSets" rel="noopener noreferrer"&gt;Color Palette Demo&lt;/a&gt;」&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The basic operations of a graph visual analysis application include visualization settings, layout switching, and data filtering. What can really bring insights to users is a variety of analysis algorithms. In actual business scenarios, algorithms provide users with powerful data insight abilities.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Traversal algorithm: Depth-first traversal calculates all attack links from hacker nodes to user asset nodes;&lt;/li&gt;
&lt;li&gt;Loop detection: Help the users to find loops from a large number of nodes. This structure is often very worthy of attention in graph analysis scenarios, and its existence may mean the existence of risks; &lt;/li&gt;
&lt;li&gt;The shortest path: Help the user to find the path between two nodes. For example, in a supply chain graph or a trading graph, the path between risk nodes or blacklisted users can be explored, and in-depth analysis can be conducted to find the source of risk and avoid risks in time;&lt;/li&gt;
&lt;li&gt;Automatic clustering/community discovery: In the domain detection scenario, a node represent a domain name. And the edges indicate the relationships between the domain names. The relevance of the domain names is used as the weight of the edge. The LOUVAIN algorithm can be used to classify the DGA family.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In G6, we have supported algorithms such as depth-first DFS, breadth-first BFS, loop detection, shortest path, obtaining node degree, minimum spanning tree, automatic clustering/community discovery, etc. In the future, we will continue to enrich the graph algorithms in G6.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F1id9rh73tvuwrf8hogeo.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F1id9rh73tvuwrf8hogeo.gif" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fbhtgc0mvhi9m0hsaw8c0.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fbhtgc0mvhi9m0hsaw8c0.gif" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Performance for Real-time Interaction
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;「&lt;a href="https://g6.antv.vision/en/examples/interaction/dragCanvasHideItem#hideItem" rel="noopener noreferrer"&gt;Demo&lt;/a&gt;」&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;With the upgrade and blessing of the underlying rendering engine, the rendering performance of G6 has been greatly improved: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Automatically crop the external graphics of the viewport to improve the global rendering performance; &lt;/li&gt;
&lt;li&gt;In the normal mode, the efficiency of primitive picking (for example, hovering a node and highlighting it, clicking a node, etc.) is increased by 2 to 3 times; &lt;/li&gt;
&lt;li&gt;In the quickHit mode, text does not participate in the picking. For large-scale graphs, the efficiency of picking is improved even more.
We have also made many optimizations to improve the performance of interaction:&lt;/li&gt;
&lt;li&gt;The focused text size, stroke thickness, and node size of the selected element can be fixed when the canvas is zoomed;&lt;/li&gt;
&lt;li&gt;Hiding non-key graphic shapes during canvas dragging and canvas zooming to make the interaction more smooth.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Polishing Detailed Experience
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;「&lt;a href="https://g6.antv.vision/en/examples/item/customNode#pointChartNode" rel="noopener noreferrer"&gt;Statistical Chart Node Demo&lt;/a&gt;」&lt;br&gt;
「&lt;a href="https://g6.antv.vision/en/examples/item/customNode#jsxNode" rel="noopener noreferrer"&gt;Custom Node with JSX-like Syntax Demo&lt;/a&gt;」&lt;br&gt;
「&lt;a href="https://g6.antv.vision/en/examples/interaction/createEdge#drag" rel="noopener noreferrer"&gt;Parallel Edges Demo&lt;/a&gt;」&lt;br&gt;
「&lt;a href="https://g6.antv.vision/en/examples/interaction/select#click" rel="noopener noreferrer"&gt;Multiple Selecting Modes Demo&lt;/a&gt;」&lt;br&gt;
「&lt;a href="https://g6.antv.vision/en/examples/item/arrows#built-in-arrows" rel="noopener noreferrer"&gt;Built-in Arrow Demo&lt;/a&gt;」&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;As a graph visualization and rendering engine, its completeness of functions and development experience are crucial to developers. Whether the types of nodes are rich enough, whether the definition of nodes is easy to use, whether the parallel edges can be displayed elegantly, whether a batch of nodes can be easily selected, etc. Fortunately, all these G6 have built-in support.&lt;/p&gt;

&lt;p&gt;Compared to other graph visualization libraries, G6 has very rich nodes. In addition to basic built-in nodes such as circle and rectangle, G6 also supports custom nodes. What's more, G6 support custom a node with any the statistical chart of AnV G2.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fiva16omtlhteelmhkhku.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fiva16omtlhteelmhkhku.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As one of the important parts of the graph, the node has always been the most important element in G6. From G6 1.0 to G6 3.x, custom nodes need to be defined based on the underlying Canvas API, which requires developers to have a certain Canvas technical prior knowledge. In order to reduce the difficulty of custom nodes, G6 brings a mechanism to define nodes by JSX-like syntax. Users can customize nodes by codes similar to HTML tags. &lt;strong&gt;As long as they can write HTML, they can customize nodes.&lt;/strong&gt; The basic syntax is as follows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;[group|shape] [key]="value" style={{ [key]: value }}&amp;gt;
  &amp;lt;[more tag] /&amp;gt; ...
  &amp;lt;text&amp;gt;value&amp;lt;/text&amp;gt;
&amp;lt;/[group|shape]&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you are troubled with visualizing the parallel between two nodes, please try &lt;code&gt;G6.Util.processParallelEdges&lt;/code&gt;, which generates elegant parallel edge control points automatically. It supports two interactive methods: clicking on two endpoints, dragging from one endpoint to another endpoint. And it also supports triggering the interaction with keyboard assist keys.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Ffvkybjxh5zkm726gri6z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Ffvkybjxh5zkm726gri6z.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fbmcufkkr9gr05pqolp7s.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fbmcufkkr9gr05pqolp7s.gif" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;G6 is committed to bringing a friendly development experience for developers and the most convenient interactive experience for end users. Even if it is a simple selection operation, G6 has worked hard to polish it into three modes: click 「&lt;a href="https://g6.antv.vision/en/examples/interaction/select#click" rel="noopener noreferrer"&gt;Demo&lt;/a&gt;」, box select「&lt;a href="https://g6.antv.vision/en/examples/interaction/select#brush" rel="noopener noreferrer"&gt;Demo&lt;/a&gt;」, and drag the lasso to select 「&lt;a href="https://g6.antv.vision/en/examples/interaction/select#lasso" rel="noopener noreferrer"&gt;Demo&lt;/a&gt;」.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F90awxmm41jbw5nivxp6d.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F90awxmm41jbw5nivxp6d.gif" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Regarding the edge arrows of all styles, we have built them in for you:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fhfq32jpmctq96o85ehcg.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fhfq32jpmctq96o85ehcg.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;G6 4.0 Indicates that we have decided to go depth into the field of &lt;strong&gt;graph visual analysis&lt;/strong&gt;, and we will focus on the &lt;strong&gt;visualization of large graphs&lt;/strong&gt;, &lt;strong&gt;graph intelligence&lt;/strong&gt; and &lt;strong&gt;time-series graph analysis&lt;/strong&gt;. G6 has attracted a group of contributors who truly love and believe in the broad prospects of the field of graph visualization. We eagerly hope that more friends to participate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Acknowledgements
&lt;/h2&gt;

&lt;p&gt;Thanks to all the friends who have been supporting, using, and following G6. At the same time, thanks to all the developers and contributors of G6 (in no particular order): &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Designers: #Wanbai, #Erling, #Buguo, #Liuyi, #Yuanzi, #Gele;&lt;/li&gt;
&lt;li&gt;Internal contributors: #Jingxi, #Qianzhu, #Fodu, #Xuanyu, #Yifeng, #Qianchen, #Kangkui, #Shanguo, #Yuran, #Shiwu, #Juze;&lt;/li&gt;
&lt;li&gt;External contributors: all friends who have created PR or Issues to G6. External contributors on GitHub in the past six months: ttys026，Volankey，zuiidea，xrkffgg，rainrcn，r3tard3dd，phoenix110，liuwei1025，liuhuidi，konstantinjdobler，jiaoguanwen，crystalwm，claudewowo，ZXHHHH123，Yohox，NirvanaChow。&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;AntV G6 is an open source engine for graph visualization and analysis, which focuses on relational data. &lt;br&gt;
Welcome to star our GitHub: &lt;a href="https://github.com/antvis/G6" rel="noopener noreferrer"&gt;https://github.com/antvis/G6&lt;/a&gt;&lt;br&gt;
Our website: &lt;a href="https://g6.antv.vision/en/" rel="noopener noreferrer"&gt;https://g6.antv.vision/en/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F02aaix0ufifgg0dap9oq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F02aaix0ufifgg0dap9oq.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>javascript</category>
      <category>typescript</category>
      <category>visualization</category>
    </item>
    <item>
      <title>G6 3.8 is Released</title>
      <dc:creator>Yanyan Wang</dc:creator>
      <pubDate>Sun, 27 Sep 2020 03:38:53 +0000</pubDate>
      <link>https://dev.to/yanyanwang/g6-3-8-is-released-3o30</link>
      <guid>https://dev.to/yanyanwang/g6-3-8-is-released-3o30</guid>
      <description>&lt;p&gt;The monthly release of &lt;a href="https://github.com/antvis/G6"&gt;AntV G6&lt;/a&gt; comes as scheduled. Today, we released version 3.8.0. What's new? 「G6 Interactive Document GraphMaker」 and 「Playable TimeBar」 are definitely the biggest highlights. There are also 「edge filter lens」, 「configurable FishEye」, 「more powerful JSX routine definition scheme」, 「performance optimization」 and 「complete functions」.&lt;/p&gt;

&lt;h2&gt;
  
  
  Interactive Document GraphMaker
&lt;/h2&gt;

&lt;p&gt;Just want to know how to use it, but don't want to read the documentation? With so many configuration items, can't find which one you want? The user's pain point is our pain point, and the user's trouble is our trouble. This time, we launched GraphMaker, an interactive document, which allows you to know how to configure without looking at the document.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If there is a slight movement, click &lt;a href="https://render.mybank.cn/p/c/17sc51mtdv6o"&gt;GraphMarker&lt;/a&gt; to experience it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0KeEQ_GX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/hmi4fthe3bcr2wa4dy7f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0KeEQ_GX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/hmi4fthe3bcr2wa4dy7f.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Edge Filter Lens:  Make Exploration more Focused
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Please click &lt;a href="https://g6.antv.vision/en/examples/tool/edgeFilterLens/"&gt;here&lt;/a&gt; to experience. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When there are a large number of edges in the graph, the mutual occlusion and crossover between the edges makes it extremely difficult for us to see some of the attention edges clearly. To solve this problem, G6 provides edge filter lens plug-in. The usage of the edge filter plug-in is as simple as always, just configure the filter function or built-in filter options when instantiating.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;filterLens&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;G6&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;EdgeFilterLens&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="c1"&gt;// The way to move the lens&lt;/span&gt;
  &lt;span class="na"&gt;trigger&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;drag&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="c1"&gt;// Whether to show the label inside the lens&lt;/span&gt;
  &lt;span class="na"&gt;showLabel&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;edge&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="c1"&gt;// The filter option. 'one': only show the edges with one end node inside the lens;&lt;/span&gt;
  &lt;span class="c1"&gt;// 'both': show the edges with two end nodes inside the lens;&lt;/span&gt;
  &lt;span class="c1"&gt;// 'only-source': only show the edges with source node inside the lens;&lt;/span&gt;
  &lt;span class="c1"&gt;// 'only-target': only show the edges with target node inside the lens.&lt;/span&gt;
  &lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;both&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="c1"&gt;// Custom the filter function: e.g. only show the edges with 'size' larger than 3&lt;/span&gt;
  &lt;span class="nl"&gt;shouldShow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;d&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;size&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2-9_VsG8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/2pcvtsipv79z0bd1ed4g.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2-9_VsG8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/2pcvtsipv79z0bd1ed4g.gif" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Various TimeBars that can be Played
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Please click &lt;a href="https://g6.antv.vision/en/examples/tool/timebar/"&gt;here&lt;/a&gt; to experience. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The TimeBar component is a preview version, and configuration items and APIs may change. If you use it in a production environment, please consider carefully, we will provide a stable version in the next version.&lt;br&gt;
We provide three forms of TimeBar plug-ins:&lt;br&gt;
• Trend Chart TimeBar&lt;br&gt;
• Simple TimeBar&lt;br&gt;
• Tick TimeBar&lt;br&gt;
All of them support range/single time point playback, fast forward, rewind, speed adjustment and other functions. Among them, the trend chart time axis and the simple version time axis support single time and time range switching.&lt;/p&gt;
&lt;h3&gt;
  
  
  Trend Chart TimeBar
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--maqAa1dK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/79l4ocnxzenduv4sacwx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--maqAa1dK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/79l4ocnxzenduv4sacwx.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Is a single line chart or area chart difficult to meet the demand? You can consider using a mixed chart. We currently support histograms, line charts, and area charts. We don’t support multi-line charts.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LzwPzyIQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/7qmhta1j1b2z7znrcj1s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LzwPzyIQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/7qmhta1j1b2z7znrcj1s.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Simple TimeBar
&lt;/h3&gt;

&lt;p&gt;If you think the trend chart time axis is too complicated, you can choose the simple version of the time axis component.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ZISeQ7hg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/n1kib8wnmzipf4m1n1fh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZISeQ7hg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/n1kib8wnmzipf4m1n1fh.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Tick TimeBar
&lt;/h3&gt;

&lt;p&gt;The scale type time axis is designed to display discrete time data. Each small square on the scale time axis represents a scale value. Click to select a specific scale; drag on the time axis to select the scale range.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--McbXu72y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/01pa0ns4qz1sh989x67b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--McbXu72y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/01pa0ns4qz1sh989x67b.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  FishEye Configuration is more Free
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Please click &lt;a href="https://g6.antv.vision/en/examples/tool/fisheye/"&gt;here&lt;/a&gt; to experience.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In the last version of G6, we launched FishEye, a plug-in designed for the exploration of focus + context, which can ensure that while zooming in on the area of interest, the context and the relationship between the context and the focus area are not lost.&lt;br&gt;
This time, we made FishEye even better! We have added more configurations to FishEye, allowing users to dynamically change FishEye's coverage and magnification while using FishEye. Users are able to explore whatever they want.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--uNPg6jp1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ytf6z6eoyjhdqwr0oo7l.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uNPg6jp1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ytf6z6eoyjhdqwr0oo7l.gif" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  More Powerful Node Definition Scheme
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Please click &lt;a href="https://g6.antv.vision/en/examples/item/customNode/#jsxNodeWithAnimate"&gt;here&lt;/a&gt; to experience, and the document is stamped &lt;a href="https://g6.antv.vision/en/docs/manual/middle/elements/nodes/jsx-node/"&gt;here&lt;/a&gt;. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In the last version of G6, in order to reduce the cost of getting started with user-defined nodes, we provided a JSX-like syntax to define nodes. At the same time of convenience, a lot of restrictions are added, and flexibility is greatly reduced.&lt;/p&gt;

&lt;p&gt;We collected users’ opinions and made some upgrades. While reducing the cost of getting started, it also maintains a certain degree of flexibility and scalability. Now, the JSX-like pre-release custom node supports the following configurations:&lt;/p&gt;

&lt;p&gt;• Update Support the definition of afterDraw, setState and other methods;&lt;br&gt;
• The &lt;code&gt;next&lt;/code&gt; attribute is added to &lt;code&gt;style&lt;/code&gt;. When the value is &lt;code&gt;'inline'&lt;/code&gt;, the next element will automatically be laid out to the right of the previous element.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;G6&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;registerNode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;jsx-node&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;jsx&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;cfg&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;`&amp;lt;group&amp;gt;
        &amp;lt;rect style={{
      marginLeft: 10,
      marginTop: 3,
      width: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;cfg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;width&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;,
      height: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;cfg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;height&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;,
      fill: '#fff',
      stroke: '#1890ff'
    }} name="body" &amp;gt;
      &amp;lt;rect style={{
        marginLeft: 10,
        width: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;cfg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;width&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;cfg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;used&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;,
        height: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;cfg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;height&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;,
        fill: '#1890ff',
        stroke: '#1890ff'
      }}/&amp;gt;
    &amp;lt;/rect&amp;gt;
  &amp;lt;/group&amp;gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;setState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;boolean&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;item&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Item&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{},&lt;/span&gt;
  &lt;span class="nx"&gt;afterDraw&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="na"&gt;cfg&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;NodeConfig&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h2&gt;
  
  
  Performance &amp;amp; Function Optimization
&lt;/h2&gt;

&lt;p&gt;The performance problem of interaction with large amount of data has always plagued the users of G6. Following the previous version that supports hiding non-critical graphics during canvas dragging, in this version, we have added automatic hiding of non-critical graphics during zooming. This small optimization can greatly improve the performance of zooming the canvas and the user's interactive experience.&lt;/p&gt;

&lt;p&gt;In addition, when there are a large number of Combo in the graph, certain performance problems will also occur. Now, we have also optimized the performance of Combo.&lt;/p&gt;

&lt;p&gt;On the basis of adding new features and optimizing performance, polishing existing features and fixing bugs are never stopped. From 3.7.0 to 3.8.0, we have optimized the polyline algorithm, fixing usability problems and functional defects in total 20+. For more detailed content, please refer to G6 ChangeLog.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;In G6 3.8.0, we have made enhancements and optimizations in three aspects: ease of use, analysis capabilities, and performance.&lt;/p&gt;

&lt;p&gt;In order to allow users to learn and get started faster and better, we released the G6 interactive document GraphMaker; in order to make it easier to explore complex relational data, we added the side filter plug-in, and we enhanced the existing FishEye plug-in; To explore the cornerstone of time series data, we provide three different types of timelines; in order to define nodes at low cost while maintaining flexibility and scalability, we optimized the solution of using JSX to define nodes...&lt;/p&gt;

&lt;p&gt;G6 keeps moving on the field of graph visualization and graph analysis. We need your support and feedback very much, and thank you for your attention.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;AntV G6 is an open source graph visualization engine, focusing on graph visualization and graph analysis.&lt;br&gt;
Welcome to follow and star our GitHub: &lt;a href="https://github.com/antvis/G6"&gt;https://github.com/antvis/G6&lt;/a&gt;&lt;br&gt;
Official website: &lt;a href="https://g6.antv.vision/en/"&gt;https://g6.antv.vision/en/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qZFn6Frb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/b6bcfga5awlsarenj2zm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qZFn6Frb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/b6bcfga5awlsarenj2zm.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>javascript</category>
      <category>typescript</category>
      <category>visualization</category>
    </item>
    <item>
      <title>Graph Vis: G6 3.4 is released!</title>
      <dc:creator>Yanyan Wang</dc:creator>
      <pubDate>Wed, 11 Mar 2020 08:25:58 +0000</pubDate>
      <link>https://dev.to/yanyanwang/graph-vis-g6-3-4-is-released-45g8</link>
      <guid>https://dev.to/yanyanwang/graph-vis-g6-3-4-is-released-45g8</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lDU3-jZJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A%2ALkc2RpLUFwAAAAAAAAAAAABkARQnAQ" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lDU3-jZJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A%2ALkc2RpLUFwAAAAAAAAAAAABkARQnAQ" alt="发布稿 - G6-en.jpg"&gt;&lt;/a&gt;&lt;br&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What is G6
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;AntV G6 is an open source engine for graph visualization and analysis, which focuses on relational data. &lt;br&gt;
Our website: &lt;a href="https://g6.antv.vision/en/"&gt;https://g6.antv.vision/en/&lt;/a&gt;&lt;br&gt;
Welcome to star our GitHub: &lt;a href="https://github.com/antvis/G6"&gt;https://github.com/antvis/G6&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;With G6, you can create fantastic graph visualizations with your infinity imagination!&lt;br&gt;
&lt;br&gt;Checkout some excellent cases powered by G6:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://g6.antv.vision/en/examples/case/decisionTree"&gt;Interactive Decision Tree&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://medium.com/antv/graph-shows-what-do-people-like-to-say-at-christmas-85b87ba87f50"&gt;Graph Shows What does People Like to Say at Christmas&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://medium.com/antv/fire-population-graph-of-australia-cities-6079fa3278d0"&gt;Fire &amp;amp; Population Graph of Australia Cities&lt;/a&gt;；&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://g6.antv.vision/en/examples/case/edgeBundling"&gt;American Airlines with Bundling&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://g6.antv.vision/en/examples/case/metroLines"&gt;Animated Metro Map&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_1fYX9cI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A%2AfJZtRoL_sS0AAAAAAAAAAABkARQnAQ" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_1fYX9cI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A%2AfJZtRoL_sS0AAAAAAAAAAABkARQnAQ" alt="image.png"&gt;&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;br&gt;Last month, we just published G6 3.3. To address some problems reported by users for a long time, we try our best to develop and iterate with light speed. Now, G6 3.4 is done and published! Don't be afraid, it is totally compatible with v3.3. We believe that there will be no best, but better G6.&lt;br&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  SVG is Coming back!
&lt;/h2&gt;

&lt;p&gt;To enhance the performance, the rendering engine for G6 3.3 has been fully upgraded. But v3.3 only supports Canvas rendering. Now, G6 3.4 fully supports SVG rendering. The interactions, animations, and layouts perform well with SVG too. When customizing a node or an edge type, not only the basic shapes as circle, rect, path, etc. are available, but also DOM shape! Let's have a glance at it now!&lt;br&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Zl9hAycb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A%2AUKCSRq8lEPgAAAAAAAAAAABkARQnAQ" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Zl9hAycb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A%2AUKCSRq8lEPgAAAAAAAAAAABkARQnAQ" alt="dom-node.gif"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Custom a node with DOM&lt;/span&gt;
&lt;span class="nx"&gt;G6&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;registerNode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;dom-node&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;draw&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cfg&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;group&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;group&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addShape&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;dom&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;attrs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;cfg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;size&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="na"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;cfg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;size&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="na"&gt;html&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
          &lt;span class="s2"&gt;`&amp;lt;div style="background-color: #fff; border: 2px solid #5B8FF9; border-radius: 5px; width: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;cfg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;size&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;px; height: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;cfg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;size&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;px; display: flex;"&amp;gt;
            &amp;lt;div style="height: 100%; width: 33%; background-color: #CDDDFD"&amp;gt;
              &amp;lt;img alt="image" style="line-height: 100%; padding-top: 6px; padding-left: 8px;" src="https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*Q_FQT6nwEC8AAAAAAAAAAABkARQnAQ" width="20" height="20" /&amp;gt;  
            &amp;lt;/div&amp;gt;
            &amp;lt;span style="margin:auto; padding:auto; color: #5B8FF9"&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;cfg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;label&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;/span&amp;gt;
          &amp;lt;/div&amp;gt;`&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;single-node&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h2&gt;
  
  
  New Chapter for State Mechanism
&lt;/h2&gt;

&lt;p&gt;In G6, state for node/edge builds the relationships between「interactions / data changes」and「styles of node/edge」quickly.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;e.g.: the 'hover' state of a node is activated when the mouse enters the node, and the style of the node is changed to response the interaction; 'hover' state is inactivated when the mouse leave the node, and the style of the node is resumed.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  In the past
&lt;/h4&gt;

&lt;p&gt;In actual scene, the states are complicate rather than simple 'hover' or 'select'. When you have lots of states, you might need to write the code with previous versions as below👇:&lt;br&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cruCzx9e--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A%2AJ7XOTJPiwOgAAAAAAAAAAABkARQnAQ" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cruCzx9e--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A%2AJ7XOTJPiwOgAAAAAAAAAAABkARQnAQ" alt="2.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;By default, states are only related to the styles of the  &lt;a href="https://g6.antv.vision/en/docs/manual/middle/elements/shape-keyshape"&gt;keyShape&lt;/a&gt; of a node or an edge. However, some other sub shapes of node or edge need to be updated in some cases. So you need to write the code with previous version as👇:&lt;br&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rDWW35pR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A%2A_HATQYI75UUAAAAAAAAAAABkARQnAQ" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rDWW35pR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A%2A_HATQYI75UUAAAAAAAAAAABkARQnAQ" alt="3.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Besides, the previous versions of G6 do not support a state with multiple values, and mutually exclusive states. E.g.: A node represents a person. He/she has four values for state 'bodyState': 'healthy', 'suspect', 'ill', and 'dead'. The four states are independent to each other and a person can not have two or more of them in the same time. In previous versions, G6 only supports binary states, which will lead to the situation that all the four states exist on a person in the same time with the following operations:&lt;br&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MXgBi3LK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A%2AlyowTLJBDuYAAAAAAAAAAABkARQnAQ" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MXgBi3LK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A%2AlyowTLJBDuYAAAAAAAAAAABkARQnAQ" alt="states.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Let's Move on!
&lt;/h4&gt;

&lt;p&gt;G6 3.4  helps you to resolve the problems above. With G6 3.4, you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Configure the target state quickly&lt;/strong&gt;: Assign a new state and clear all the existing states on a node;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;State with multiple values&lt;/strong&gt;: e.g. the 'bodyState' of a node representing a person has four values 'healthy', 'suspect', 'ill', and 'dead';&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mutually exclusive state&lt;/strong&gt;: e.g. 'healthy', 'suspect', 'ill', and 'dead' for 'bodyState' are mutually exclusive to each other, any two of them will not exist on a person in the same time;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Update the styles for all the sub shapes on a node or an edge&lt;/strong&gt;: e.g. a node consist of a rect, a text and an icon image. When the state of the node is changed, styles of all the shapes can be changed to response it;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Modify the state configurations&lt;/strong&gt;: modify the style configurations for a state easily.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YGbQtENU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A%2ADD4oS5By3XoAAAAAAAAAAABkARQnAQ" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YGbQtENU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A%2ADD4oS5By3XoAAAAAAAAAAABkARQnAQ" alt="hover-state.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;More detail about the new state mechanism can be found in: &lt;a href="https://g6.antv.vision/en/docs/manual/middle/states/state-new/"&gt;Take use of G6 state mechanism&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ln_voczb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A%2AdCC-Qqu5cMoAAAAAAAAAAABkARQnAQ" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ln_voczb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A%2AdCC-Qqu5cMoAAAAAAAAAAABkARQnAQ" alt="7.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Preview
&lt;/h2&gt;

&lt;p&gt;In this May, new node group mechanism with powerful ability will be available in G6 3.5!&lt;br&gt;&lt;/p&gt;




&lt;p&gt;&lt;br&gt;Star &lt;a href="https://github.com/antvis/g6"&gt;the GitHub of G6&lt;/a&gt;, you will obtain an open source, free, and excellent graph visualization engine!&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;AntV G6 is an open source engine for graph visualization and analysis, which focuses on relational data. &lt;br&gt;
Our website: &lt;a href="https://g6.antv.vision/en/"&gt;https://g6.antv.vision/en/&lt;/a&gt;&lt;br&gt;
Welcome to star our GitHub: &lt;a href="https://github.com/antvis/G6"&gt;https://github.com/antvis/G6&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JPOSCh-N--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A%2AiTUpR4SlvGkAAAAAAAAAAABkARQnAQ" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JPOSCh-N--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A%2AiTUpR4SlvGkAAAAAAAAAAABkARQnAQ" alt="g6-gallery.png"&gt;&lt;/a&gt;&lt;br&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🎊New AntV Member
&lt;/h2&gt;

&lt;p&gt;AntV will have a new member soon: a graph editing engine &lt;a href="https://github.com/antvis/x6"&gt;X6&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>visualization</category>
      <category>typescript</category>
      <category>opensource</category>
      <category>graph</category>
    </item>
    <item>
      <title>G6 3.3: Visualize a Graph with Excellent Performance!</title>
      <dc:creator>Yanyan Wang</dc:creator>
      <pubDate>Tue, 18 Feb 2020 11:17:31 +0000</pubDate>
      <link>https://dev.to/yanyanwang/g6-3-3-visualize-a-graph-with-excellent-performance-4c4b</link>
      <guid>https://dev.to/yanyanwang/g6-3-3-visualize-a-graph-with-excellent-performance-4c4b</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0BoQHaly--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.nlark.com/yuque/0/2020/jpeg/156681/1582023581662-389c703d-7e3a-41a5-8b08-b609131f4445.jpeg%23align%3Dleft%26display%3Dinline%26height%3D476%26name%3Den%2520-%2520G6.jpg%26originHeight%3D476%26originWidth%3D1020%26size%3D71505%26status%3Ddone%26style%3Dnone%26width%3D1020" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0BoQHaly--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.nlark.com/yuque/0/2020/jpeg/156681/1582023581662-389c703d-7e3a-41a5-8b08-b609131f4445.jpeg%23align%3Dleft%26display%3Dinline%26height%3D476%26name%3Den%2520-%2520G6.jpg%26originHeight%3D476%26originWidth%3D1020%26size%3D71505%26status%3Ddone%26style%3Dnone%26width%3D1020" alt="en - G6.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;🌈G6 3.3 is released!&lt;br&gt;
&lt;br&gt;AntV G6 is an open source engine for graph visualization and analysis, which focuses on relational data. &lt;br&gt;
Welcome to star our GitHub: &lt;a href="https://github.com/antvis/G6"&gt;https://github.com/antvis/G6&lt;/a&gt;&lt;br&gt;
Our website: &lt;a href="https://g6.antv.vision/en/"&gt;https://g6.antv.vision/en/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;br&gt;A graph is a set of objects and their relationships, which usually has large amount of data. In most cases, a graph is visualized as a large number of elements, including nodes and edges. And each element may be composed of multiple shape items, such as the most commonly used nodes with text labels. The performance of graphs' rendering and interaction have always been one of the most difficult problems in relational data visualization. Especially in the case of visualizing large graph by front-end with limited computing resources. How to improve the performance has become a major problem for G6.&lt;/p&gt;

&lt;p&gt;At the beginning of 2020, we have finally taken the first step towards this problem: G6 3.3 with excellent performance has been released. Let's explore the secret of it!&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Engine
&lt;/h2&gt;

&lt;p&gt;The main contributor to the improvement of G6's performance is the the upgraded basic rendering engine. The user interactions usually focus on the local region or elements, e.g. updating the styles of a node, dragging a node. Frequent rendering leads to bad performance and worse interaction experiment. So, our basic rendering engine utilizes「&lt;strong&gt;Local Rendering&lt;/strong&gt;」 instead of global rendering to improve the performance.&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9NrS1cFd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/6rjm5xilukjoj3zc8s1x.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9NrS1cFd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/6rjm5xilukjoj3zc8s1x.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;br&gt;What is local rendering? As the figure shown, we wish to update the filling color of the star shape to be green in figure a:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Global rendering: re-render the whole canvas, which is in a rectangle with red border in figure b;&lt;/li&gt;
&lt;li&gt;Local rendering: calculate the bounding box of the shape to be updated firstly, which is the rectangle with red border in figure c. And then, only re-render the region in the red rectangle..&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--l1bzCL9E--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/dsip4vq2f14sp6ynaff7.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--l1bzCL9E--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/dsip4vq2f14sp6ynaff7.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;br&gt;Similarly, dragging a shape causes the frequent rendering too. As shown above, when user drag a star, the local rendering only re-render the star shape and the shape(s) covered by it.&lt;/p&gt;

&lt;p&gt;We all know that the efficiency of the Canvas rendering in front-end is very low. The local rendering mechanism  improves it  greatly by reducing the area to be re-rendered. Especially for the case of frequently update the local area of a graph with large amount of shapes. But we should admit that the calculation of bounding boxes also takes some extra cost.&lt;/p&gt;

&lt;h2&gt;
  
  
  Exercises
&lt;/h2&gt;

&lt;p&gt;After knowing the engine and theory, let's step into the practical exercises.&lt;/p&gt;

&lt;h3&gt;
  
  
  Exercise 1
&lt;/h3&gt;

&lt;p&gt;The data &lt;a href="http://vlado.fmf.uni-lj.si/pub/networks/data/collab/netscience.htm"&gt;Net-Science&lt;/a&gt; has 1589 nodes and 2742 edges, which describes the collaborative relationships between paper authors. A node represents an author. If two authors have collaborations, the two corresponding nodes will be connected by an edge.&lt;/p&gt;

&lt;h4&gt;
  
  
  Overview
&lt;/h4&gt;

&lt;p&gt;We first use G6 to visualize this data. The result is shown below. The sizes of the nodes are mapped to their degree. It is easy to find that there are lots of discrete nodes, which might represent the 'geeks' who work alone. There are also some other interesting sub-strucutres, such as the node with high degree in green rectangle, which might be an author who has lots of collaborations with others. And some cliques like the one in the red rectangle, which is a group of fully connected nodes,  means the authors in the clique have close working relationships.&lt;/p&gt;

&lt;p&gt;Users wish to explore these local structures by interaction, such as dragging a node to observe the related connections, dragging a group to re-arrange the positions, tagging the name of the nodes to better show the details, etc.&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TeDPx8pF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A%2Ab9cNSb05tuwAAAAAAAAAAABkARQnAQ" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TeDPx8pF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A%2Ab9cNSb05tuwAAAAAAAAAAABkARQnAQ" alt="net-science.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Experiment
&lt;/h4&gt;

&lt;p&gt;To better show the detail information of the nodes, labels are placed around each node. It is known that the texts consumes a lot, and a node's label might be very long. If each node on the graph has a label, there will be 1,589 * 2 + 2,742 = &lt;strong&gt;4331 shape items&lt;/strong&gt; in the graph.&lt;/p&gt;

&lt;p&gt;Now, we test the performance of dragging a single node and a group of nodes in G6 with this data. The result is shown in the gif below. Since the amount of this data is not so big, we find that the experience of the interaction on the versions &amp;lt; G6 3.2 is acceptable. But with carefully observation, we can find the dragged node(s) do(es) not follow the mouse well, and the FPS stays with a low value. But with G6 3.3, the interactions are smooth with high value of FPS.&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Xee4G8xa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A%2AxlAhSrmlfH8AAAAAAAAAAABkARQnAQ" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Xee4G8xa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A%2AxlAhSrmlfH8AAAAAAAAAAABkARQnAQ" alt="netscience-drag-middle.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Exercise 2
&lt;/h2&gt;

&lt;p&gt;Data &lt;a href="http://vlado.fmf.uni-lj.si/pub/networks/data/econ/Eva/Eva.htm"&gt;Eva&lt;/a&gt; has 8,343 nodes and 6,726 edges, which describes the ownerships between some American companies. A node represents a company. If company A owns company B, an edge exists between them.&lt;/p&gt;

&lt;h4&gt;
  
  
  Overview
&lt;/h4&gt;

&lt;p&gt;Same as Exercise 1, we map the degree of each node to its size. The result is shown below. Except for the discrete nodes around the graph, there are lots of nodes with high degrees, whose neighbor nodes are laid around them radially. Users wish to drag some nodes to re-arrange the positions to get better observation with the structures.&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MGgx4moD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A%2ARqwlSru9oz8AAAAAAAAAAABkARQnAQ" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MGgx4moD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A%2ARqwlSru9oz8AAAAAAAAAAABkARQnAQ" alt="eva.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Experiment
&lt;/h4&gt;

&lt;p&gt;In this experiment, each node has a label. There are 8,343 * 2 + 6,726 = &lt;strong&gt;23,412 shape items&lt;/strong&gt; in this graph. Now, we try to drag a group of nodes to new positions. In previous versions, the responding time is too long to drag the group successfully. After several tries, the group finally moves slowly to the position where the mouse ended. This is an extremely bad interaction experiment for users. In contrast, G6 3.3 performs smoothly.&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--g7aFzOGL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A%2A7wXETqb8iXoAAAAAAAAAAABkARQnAQ" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--g7aFzOGL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A%2A7wXETqb8iXoAAAAAAAAAAABkARQnAQ" alt="eva-drag-group-big.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We compare the responding speed of mouse hovering. The node style will be changed to response the mouse entering and restored when mouse leaving. We find that G6 3.3 has higher responding speed and higher FPS value:&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ehODTE4J--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A%2ADDEmSodt5BUAAAAAAAAAAABkARQnAQ" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ehODTE4J--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A%2ADDEmSodt5BUAAAAAAAAAAABkARQnAQ" alt="eva-hover-big.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Exercise 3
&lt;/h2&gt;

&lt;p&gt;The data in this exercise simulates a large scale system calling tree with 440 nodes and 439 edge. There are rich informations on each node representing a module in the system. Node A and node B is connected by an edge if there is a calling relationship between them.&lt;/p&gt;

&lt;h4&gt;
  
  
  Overview
&lt;/h4&gt;

&lt;p&gt;As shown in the figure below, to better visualize the rich informations on the nodes and edges, each node is composed with 9 basic shape items, and each edge is composed with 3 basic shape items. That means there are 440 * 9 + 439 * 3 = &lt;strong&gt;5277 shape items&lt;/strong&gt; in this graph. 42% of them are texts which cost a lot. Besides, the edges are drawn as bezier curves, whose computations are more complex than straight lines. What's more, the   bounding boxes of bezier curves are much larger, that is to say, the area to be locally rendered is larger. &lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3AGChSfG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A%2AtNuwRoEVKJEAAAAAAAAAAABkARQnAQ" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3AGChSfG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A%2AtNuwRoEVKJEAAAAAAAAAAABkARQnAQ" alt="complex-tree-nodeedge.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;From the gif below we find that the graph takes a large space that hardly contains by one screen. Users have to explored it by interactions. When mouse goes into an edge or a node, its style will be changed to response the interaction. The sub-trees can be expanded or collapsed.&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0DkHLTfL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A%2AT6M0R7Pj23MAAAAAAAAAAABkARQnAQ" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0DkHLTfL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A%2AT6M0R7Pj23MAAAAAAAAAAABkARQnAQ" alt="complex-tree.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Experiment
&lt;/h4&gt;

&lt;p&gt;Firstly, we compare the FPS when the mouse enters/leaves the edges and nodes.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hovering the edges: In previous versions, the speed of responding is very slow. The edges even did not response the hovering when the moving speed is too fast. The FPS is about 5.5～8.6fps; In G6 3.3, the responding speed is improved by local rendering and improvement of shapes' pickup algorithms. The FPS is about 12.9～22.6 fps.&lt;/li&gt;
&lt;li&gt;Hovering the nodes: In previous versions, the FPS is about 7.1～10.3 fps. And users can feel the stuck; In G6 3.3, the interaction is very smooth with FPS 23.4～32.5fps.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--c6iP4hBv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A%2AhzU5RrAHl9AAAAAAAAAAAABkARQnAQ" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--c6iP4hBv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A%2AhzU5RrAHl9AAAAAAAAAAAABkARQnAQ" alt="complex-tree-hover-big.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;br&gt;&lt;br&gt;Secondly, we also compared the performance of expanding and collapsing the sub tree on the graph. In previous versions, the animation with 6.2～9.4fps of expanding/collapsing interaction looks stutter. In G6 3.3, the animation with 20.1~34.4fps is smoother.&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--aOJKtmKE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A%2AroKWR6dTRRgAAAAAAAAAAABkARQnAQ" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--aOJKtmKE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A%2AroKWR6dTRRgAAAAAAAAAAABkARQnAQ" alt="complex-tree-collapse-big.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  We will do Better
&lt;/h2&gt;

&lt;p&gt;Although the performance of G6 has been improved a lot, there is still a large space to be better. Such as reducing the unnecessary deep clone, optimizing the re-calculation for complex shapes, etc. We will keep moving to build up a better graph visualization engine.&lt;/p&gt;

&lt;h2&gt;
  
  
  About G6 3.3
&lt;/h2&gt;

&lt;p&gt;Besides the improved performance, G6 3.3 also has these new features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Be refactored in TypeScript；&lt;/li&gt;
&lt;li&gt;Handle the situation that drag out of the canvas;&lt;/li&gt;
&lt;li&gt;More free configurations for elements and layouts;&lt;/li&gt;
&lt;li&gt;Richer building products.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;G6 3.3 has made the first attempt to solve the performance problem, and it is more friendly for TS developers. See more detail &lt;a href="https://medium.com/antv/typescript-version-g6-with-excellent-performance-is-coming-ab6ef210fc80"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In the same time, it resolves the complex interaction situation. On the other hand, the community of G6 is expanding now. G6 will be more open and free to welcome more contributors.&lt;/p&gt;

&lt;h4&gt;
  
  
  Related Links
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://g6.antv.vision/en/docs/manual/FAQ/upgradeGuide"&gt;G6 3.3 Upgrade Guide&lt;/a&gt;；&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://medium.com/antv/typescript-version-g6-with-excellent-performance-is-coming-ab6ef210fc80"&gt;G6 3.3-beta Introduction&lt;/a&gt;.
&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;AntV G6 is an open source engine for graph visualization and analysis, which focuses on relational data. &lt;br&gt;
Welcome to star our GitHub: &lt;a href="https://github.com/antvis/G6"&gt;https://github.com/antvis/G6&lt;/a&gt;&lt;br&gt;
Our website: &lt;a href="https://g6.antv.vision/en/"&gt;https://g6.antv.vision/en/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vij69sSI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A%2Ag2PyQrOex_kAAAAAAAAAAABkARQnAQ" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vij69sSI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A%2Ag2PyQrOex_kAAAAAAAAAAABkARQnAQ" alt="g6-gallery.png"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

</description>
      <category>visualization</category>
      <category>typescript</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
