什么是G2?
G2是一個簡介的漸進式語法,主要用于制作網頁的可視化。它提供了一套函數風格式、聲明形式的API和組件化的編程范式,希望幫助用戶快速完成報表搭建、數據探索、可視化等多樣的需求
G2的核心概念:
標記(Mark):繪制數據驅動的圖形
轉換(Transform):派生數據
比例尺(Scale):將抽象的數據映射為視圖數據
坐標系(Coordinate):對空間通道應用點變換
視圖復合(Composition):管理和增強視圖
動畫(Animation):數據驅動的動畫和連續的形變動畫
交互(Iteraction):操作視圖并且展示詳細信息
為什么選G2?和echart對比
設計理念:
G2:基于圖形語法,注重數據對圖形的微觀控制和自由映射,設計出發點是圖形
Echart:基于圖標類型,提供圖表中數據相關的圖形映射配置,設計出發點是圖表
使用場景:
G2: 更適合需要高度定制和靈活控制圖形展示的場景,可以創建非常用的圖表類型。
Echart:更適合快速展示常規圖標信息,封裝好難點,配置數據即可使用
Mark 繪制數據驅動的圖形
- interval - 通常用來繪制柱、條形圖,餅圖等相關圖表。
- point - 主要用于繪制散點圖,利用點的粒度來分析數據的分布情況。
- line - 根據一系列的點,繪制折線,通常用來繪制折線圖。
- area - 通常用來繪制我們常見的面積圖,通過填充,可以更好突出趨勢堆積信息。
- cell - 根據 x, y 將空間劃分成一個子空間,然后進行可視化繪制,常見于一些方塊圖,如日歷圖、聚合熱力圖等。
- rect - 使用兩組 x,兩組 y 來定位一個矩形區域,常用于直方圖、矩陣樹圖等。
- link - 標記使用兩個用 (x, y) 定位的點,繪制一條帶方向的直線。通過指定
x,y通道為長度為 2 的字段數組即可。 - vector - 用
start,end兩個點來表示一個向量,通常用于繪制具備向量含義的數據,比如風向量場等。 - box - 用來繪制箱線圖,通常用來展示一組數據分布情況的統計圖。
- boxplot - 用來繪制箱線圖,并且內置數據的聚合操作。
- text - 通過指定文本的樣式通道,可以在畫布上繪制和數據綁定的文本字符。
- image - 利用
src通道在畫布上繪制圖片。 - shape - 使用自定義函數靈活繪制自定義圖形。
- lineX - 指定
x通道來繪制垂直于 x 軸的輔助線,常用于繪制平均值或其他聚合數據輔助線。 - lineY - 指定
y通道來繪制垂直于 y 軸的輔助線,常用于繪制平均值或其他聚合數據輔助線。 - range - 使用一組
x(x1, x2) 和一組y(y1, y2) 來定位一個矩形區域,常用于繪制高亮指定區域的輔助區域。 - rangeX - 使用一組
x(x1, x2) 來定位一個垂直于 x 軸的矩形區域,常用于繪制高亮指定區域的輔助區域。 - rangeY - 使用一組
y(y1, y2) 來定位一個垂直于 y 軸的矩形區域,常用于繪制高亮指定區域的輔助區域。 - polygon - 利用多組 (x, y) 數據點,在畫布中繪制閉合的多邊形,通常結合一些社區布局算法使用。
- wordCloud - 繪制詞云圖。
- density - 渲染核密度數據,多用于小提琴圖。
- heatmap - 接受熱力數據,多用于繪制熱力圖。
創建可視
new Chart 創建Chart實例 antV G2中的autoFit屬性是指圖表是否自適應容器寬高。
chart.interval 添加interval圖形
interval
通常用來繪制柱狀圖、條形圖、餅圖等,通過坐標系、坐標尺、數據Transform等的變化,可以產生多種多樣的可視化表現樣式,是圖形語法中,常見的Mark
import { Chart } from '@antv/g2';
const data = [
{ letter: 'A', frequency: 0.08167 },
{ letter: 'B', frequency: 0.01492 },
];
const chart = new Chart({
container: 'container',
autoFit: true,
});
chart.interval().data(data)
.encode('x', 'letter')
.encode('y', 'frequency')
.encode('color', 'red')
.style('fillOpacity', 0.6);
chart.render();

.encode('shape', 'hollow') 即可實現空心矩形

Coordinate -坐標系
chart .interval() .coordinate({ transform: [{ type: 'transpose' }] }) //設置類型 .data(data) .encode('x', 'year') .encode('y', 'sales');
type有多種類型
type: 'fisheye' //魚眼坐標系變換對輸入的維度應用笛卡爾魚眼效果。
- band - 特殊的 ordinal 比例尺,它的值域范圍是一個連續的范圍。
- linear - 針對連續數據,對數據進行連續映射的比例尺。
- sqrt - 指數固定為
0.5的pow比例尺。 - pow - 類似于
linear比例尺,但是映射函數為指數函數(exponential)。 - log - 類似于
linear比例尺,但是映射函數為對數函數(logarithmic)。 - ordinal - 將離散的數據映射到另外一個離散數據中。
- point - 特殊 band 比例尺,固定配置
bandWith = 0。 - quantize - 類似于
threshold,但是計算切片的方式是基于元素的數據值。 - quantile - 類似于
threshold, 但是計算切片的方式是基于元素在數據中的索引。 - threshold - 將連續的值域范圍劃分為多個切片,并將這些切片映射到一個離散的數據中。
- time - 特殊的 linear 比例尺,它的值域是一組有時間順序的數據
Transform - 變換
- bin - 對連續的 x 和 連續的 y 通道進行分箱,并且對通道根據指定的 reducer 進行聚合。
- binX - 對 x 通道進行分箱,如果希望對 y 通道進行分箱,使用 binX + transpose 坐標系。
- diffY - 對 y 和 y1 通道求差集。
- dodgeX - 生成 series 通道值為 color 通道的值,根據 series 通道實現分組效果。
- flexX - 根據指定通道設置 x 比例尺的 flex 屬性,實現不等寬矩形的效果。
- group - 對離散的 x 和 連續的 y 通道進行分組,并且對通道根據指定的 Reducer 進行聚合。
- groupColor - 對離散的 color 通道進行分組,并且對通道根據指定的 Reducer 進行聚合。
- groupX - 對離散的 x 通道進行分組,并且對通道根據指定的 Reducer 進行聚合。
- groupY - 對離散的 y 通道進行分組,并且對通道根據指定的 Reducer 進行聚合。
- jitter - 根據離散的 x 和 離散的 y 比例尺,生成 dy 和 dx 通道,實現在某個區域散開的效果。
- jitterX - 根據離散的 x 比例尺,生成 dx 通道,實現在某個區域的 x 方向散開的效果。
- jitterY - 根據離散的 y 比例尺,生成 dy 通道,實現在某個區域的 y 方向散開的效果。
- normalizeY - 對 y 和 y1 通道根據指定的 basis 進行歸一化處理。
- select - 按照指定通道進行分組,根據指定通道和 selector 從每組選擇出數據。
- selectX - 按照指定通道進行分組,根據 x 通道和 selector 從每組選擇出數據。
- selectY - 按照指定的通道進行分組,根據 y 通道和 selector 從每組選擇出數據。
- pack - 生成 transform 和 scale 屬性,從而讓圖形在空間中緊湊排列。
- sample - 當數據量遠大于屏幕像素的時候,開啟一些內置的采樣策略,提升圖表繪制性能。
- sortColor - 對離散的 color 比例尺的定義域根據指定通道排序。
- sortX - 對離散的 x 比例尺的定義域根據指定通道排序。
- sortY - 對離散的 y 比例尺的定義域根據指定通道排序。
- stackEnter - 對 enterDuration 和 enterDelay 通道進行堆疊,實現分組動畫的效果。
- stackY - 按照指定通道分組,對每組的 y 和 y1 通道進行堆疊,實現堆疊效果。
- symmetryY - 按照指定通道分組,給每組的 y 和 y1 通道添加偏移,實現對稱效果。
Interaction - 交互 操作視圖并且展現詳細信息。
- brushFilter - 框選篩選。
- brushXFilter - x 方向框選篩選。
- brushYFilter - y 方向框選篩選。
- brushHighlight - 框選高亮。
- brushXHighlight - x 方向框選高亮。
- brushYHighlight - y 方向框選高亮。
- brushAxisHighlight - 坐標軸框選高亮。
- legendHighlight - 圖例高亮。
- legendFilter - 圖例篩選。
- tooltip - 展現提示信息。
- elementHighlight - 高亮元素。
- elementHighlightByX - 高亮具有相同 x 通道值的元素。
- elementHighlightByColor - 高亮具有相同 color 通道的元素。
- elementSelect - 選擇元素。
- elementSelectByX - 選擇擁有相同 x 通道值的元素。
- elementSelectByColor - 選擇擁有相同 color 通道值的元素。
- fisheye - 魚眼交互。
- charIndex - 索引圖表。
- poptip - 展現提示文本。
- sliderFilter - 拖動條篩選。
修改提示名稱
Component - 組件 繪制輔助視覺元素。
axis: { y: { // Title title: 'Frequency', titleSpacing: 30, titleFill: 'steelblue', // Line line: true, arrow: true, lineArrowOffset: 10, lineArrowSize: 30, lineLineWidth: 10, // Tick tickLength: 20, tickFilter: (_, i) => i % 3 !== 0, // Label labelFormatter: '.0%', // Grid gridLineDash: null, gridStroke: 'red', gridStrokeWidth: 5, gridAreaFill: '#eee', }, x: { title: 'Letter', labelFormatter: (d) => d.repeat(3), labelFontSize: 30, labelSpacing: 30, }, },



chart.title('This is the title of chart.');
![]()

設置選中和不選中

Label 繪制數據標簽和標簽屬性的變換
- contrastReverse - 標簽顏色在圖形背景上對比度低的情況下,從指定色板選擇一個對比度最優的顏色。
- overflowHide - 對于標簽在圖形上放置不下的時候,隱藏標簽。
- overlapDodgeY - 對位置碰撞的標簽在 y 方向上進行調整,防止標簽重疊。
- overlapHide - 對位置碰撞的標簽進行隱藏,默認保留前一個,隱藏后一個。

area
目前 area 有以下幾個內置 shape 圖形,默認為 area。
| 圖形 | 描述 | 示例 |
|---|---|---|
| area | 繪制直線連接的面積圖 | |
| smooth | 繪制平滑曲線的面積圖 | |
| vh | 繪制階梯面積圖,先豎線后橫線連接 | |
| hv | 繪制階梯面積圖,先橫線后豎線連接 | |
| hvh | 繪制階梯面積圖,豎橫豎,中點連接 |
chart.area()
Animation -動畫 數據驅動的動畫和連續的形變動畫。
提供了三種動畫場景類型
enter- 元素第一次出現的出場動畫;update- 數據更新的時候,元素更新的動畫;exit- 數據更新的時候,元素被銷毀退出畫布的動畫;
- fadeIn - 漸現動畫。
- fadeOut - 漸隱動畫。
- growInX - 容器沿著 x 方向放大的矩陣動畫,多用于 G.Group 容器類進行動畫。
- growInY - 容器沿著 y 方向放大的矩陣動畫,多用于 G.Group 容器類進行動畫。
- morphing - 圖形之間的形變動畫。
- pathIn - Path 路徑入場動畫。
- scaleInX - 單個圖形沿著 x 方向的生長動畫。
- scaleInY - 單個圖形沿著 y 方向的生長動畫。
- scaleOutX - 單個圖形沿著 x 方向的消退動畫。
- scaleOutY - 單個圖形沿著 y 方向的消退動畫。
- waveIn - 劃入入場動畫效果,不同坐標系下效果不同。
- zoomIn - 沿著圖形中心點的放大動畫。
- zoomOut - 沿著圖形中心點的縮小動畫。
關鍵幀動畫
上面的動畫都是過渡動畫,不涉及到數據的更新,G2 也提供了制作關鍵幀動畫的能力。使用 chart.timingKeyframe 創建一個時間容器,用于放置一系列視圖,它會對這些視圖中有關系的圖形元素應用平滑的過渡效果。而對應關系通過 key 和 groupKey 兩個通道指定。
浙公網安備 33010602011771號