轉載:https://www.cnblogs.com/xjnotxj/p/12601021.html
BizCharts 使用筆記
一、介紹#
1、背景#
BizCharts 這個其實兩年前就用過一次,最近做 dashboard,涉及數據的可視化展示(即圖表功能),於是又用了回 BizCharts。這次干脆趁熱通讀下官方文檔,遂成此篇。
2、什么是 BizCharts#
首先,AntV 是螞蟻金服全新一代數據可視化解決方案。
其次,G2是 AntV 旗下,以數據驅動,具有高度的易用性和擴展性的可視化圖形語法。
再次,Bizcharts是一款基 於antv 的 G2 進行 react 封裝的組件,是以數據為驅動的可視化圖表。
3、優勢/特點#
(在市面上跟其他類似庫相比)跟 react 組件寫法結合的最好
是 ant design pro 推薦使用的第三方圖表庫(我司用的即 ant design pro),且 ant design pro 還原生提供了在 BizCharts 基礎上二次封裝的簡化版圖表
支持 Canvas 及 SVG 兩種模式的圖表渲染
兼容性,支持 Chrome,Safari,IE11+ 瀏覽器
4、文檔#
① 官網:
https://bizcharts.net/
② API:
https://bizcharts.net/product/bizcharts/category/7/page/12
③ gallery(demo):
https://bizcharts.net/product/bizcharts/gallery
建議開發的時候,直接翻閱 gallery(demo)拿來主義再修改即可。因為 BizCharts 的有些編碼設計(尤其是涉及復雜圖表)我覺得並不是很好理解。
gallery 還支持根據 api 篩選 demo,挺好用:
https://img2020.cnblogs.com/blog/896608/202003/896608-20200329190917600-1433616341.png
5、安裝#
npm install bizcharts --save
以最新的 v3.5.8 為例。
二、圖表構成#
1、組件構成#
在 BizCharts 中,圖表是由各個組件組合而成的。組件有兩種類型:
實體組件:在圖表上有對應的圖形、文本顯示。
抽象組件:沒有顯示,是一種概念抽象組件。
引用組件的方式:
Copy
import {
G2,
Chart,
Geom,
Axis,
Tooltip,
Coord,
Label,
Legend,
View,
Guide,
Shape,
Facet,
Util
} from "bizcharts";
2、組件的空間構成#
下圖所示為常用圖表的各組件的空間構成。
https://img2020.cnblogs.com/blog/896608/202003/896608-20200329014340249-1282922549.png
三、組件 - Chart#
1、data#
BizCharts 支持兩種格式的源數據:
JSON 數組
DataView 對象 (由 DataSet 創建,下面會專門介紹)
2、width/height + forceFit + padding#
https://img2020.cnblogs.com/blog/896608/202003/896608-20200329121706929-1040085337.png
① height、width
height、width 未指定時,默認為 500px。
注:只是 Canvas 的寬高,如果
),或者沒有數據觸發了placeholder屬性(下面會介紹),則不算在內。
② forceFit
圖表的寬度自適應開關(不能自適應高度),默認為 false,設置為 true 時表示自動取 dom(實例容器)的寬度。
注:當 forceFit: true 時,width 不生效。
② padding
有時候坐標軸、圖例等繪圖區域外的組件顯示不全時,可以通過調整圖表各個方向的 padding 來調整最終效果,或者直接用 auto(推薦),它會自動計算邊框(僅考慮 axis 和 legend )
Copy
<Chart padding={[ 20, 30, 20, 30]} />
<Chart padding={{ top: 20, right: 30, bottom: 20, left: 30 }} />
<Chart padding={[20, 'auto', 30, 'auto']} />
<Chart padding={['20%', '30%']} />
3、選擇 Canvas 還是 SVG ?#
默認使用 Canvas 渲染,可以改用 SVG 版本、
如何選擇:如果單就圖表庫的視角來看,選擇 Canvas 和 SVG 各有千秋。小畫布、大數據量的場景適合用 Canvas,譬如熱力圖、大數據量的散點圖等。如果畫布非常大,有縮放、平移等高頻的交互,或者移動端對內存占用量非常敏感等場景,可以使用 SVG 的方案。
4、scale#
度量 Scale,是數據空間到圖形空間的轉換橋梁,負責原始數據到 [0, 1] 區間數值的相互轉換工作,從原始數據到 [0, 1] 區間的轉換我們稱之為歸一化操作。
更多資料,可看:https://bizcharts.net/product/bizcharts/category/7/page/35
Copy
const scale = {
'sales': {
type: 'identity' | 'linear' | 'cat' | 'time' | 'timeCat' | 'log' | 'pow', // 指定數據類型
alias: string, // 數據字段的別名,會影響到軸的標題內容
formatter: () => {}, // 格式化文本內容,會影響到軸的label格式
range: array, // 輸出數據的范圍,默認[0, 1],格式為 [min, max],min 和 max 均為 0 至 1 范圍的數據。
tickCount: number, // 設置坐標軸上刻度點的個數
ticks: array, // 用於指定坐標軸上刻度點的文本信息,當用戶設置了 ticks 就會按照 ticks 的個數和文本來顯示
sync: boolean // 當 chart 存在不同數據源的 view 時,用於統一相同數據屬性的值域范圍
}
};
常用的:
formatter:formatter: (item) => {return item + "%"}, // 格式化 label 文本內容
alias:修改 lable 的 title
注:通過 Chart 的 scale ,可以直接對 Chart 下的子組件,如 Axis、Label 進行配置(當然也可以單獨在 Axis、Label 上設置)。
5、placeholder#
沒有數據,即 data 屬性傳了 null or [],應該顯示什么?
默認值: <div style={{ position: 'relative', top: '48%', textAlign: 'center' }}>暫無數據
6、theme#
默認 "default" ,可開啟 "dark" 樣式。
此功能可以作用於全局或者作用在單獨的 Chart 上。
四、組件 - Coord#
1、介紹#
BizCharts 將坐標系抽象為 Coord 組件,並且包含兩種:
笛卡爾坐標系(又名直角坐標系)(rect)【默認】
極坐標系(polar、theta、helix)
注:目前所有的坐標系均是 2 維的。
可通過 type 屬性改變坐標系類型。
五、組件 - Axis#
1、介紹#
坐標軸由如下五部分組成:
標題 title
文本 label
坐標軸線 line
刻度線 tickLine
網格 grid
https://img2020.cnblogs.com/blog/896608/202003/896608-20200329153325470-1769714040.png
2、使用#
Copy
// 只顯示其中一條坐標軸
1、name 屬性必填
2、如果不用
3、更多設置#
Axis 的很多屬性,在
1、只能在 Axis 中設置
2、只能在
3、兩者都能設置:刻度線(tickLine)等
六、組件 - Geom#
1、介紹#
Geom 為幾何標記對象,決定創建圖表的類型。
BizCharts 生成的圖表的類型,是由幾何標記(Geom 的 type 屬性)和坐標系(Coord)共同決定的。
2、幾何標記類型:type#
例如:
point:點,用於點圖的構建。
line:線,點按照 x 軸連接成一條線,構成線圖。
還可以自定義 shape。
3、數據映射相關的屬性#
包含:position, color, shape, size, opacity。
① position
位置屬性的映射,用於確定由數據中的哪幾個字段來確定數據在平面坐標系的位置。通俗地解釋,即確定 x 軸和 y 軸的數據字段。
寫法:
Copy
<Geom position={['x', 'y']} />
② color
將數據值映射到圖形的顏色上的方法。
Copy
'field',field 為數據字段名,內部會使用主題中的默認顏色進行數據值到顏色值的映射;
//代碼示例
['field', colors],將數據值映射至指定的顏色值 colors(可以是字符串也可以是數組),此時用於通常映射分類數據;
//代碼示例
<Geom color={['city', ['#ff0000', '#00ff00']]}/>
['field', 'color1-color2-colorN')],指定顏色的漸變路徑,用於映射連續的數據;
//代碼示例
<Geom color={['price', '#ff0000-#00ff00']}/>
['field', callback)],使用回調函數進行顏色值的自定義;可以使用多個字段使用*號連接 注意: color 屬性的回調函數一般返回的單個顏色,因為 G2 中所有的 shape 僅支持單個顏色 color 屬性的回調函數也可以返回數組,數組中有多個顏色,但是這時候需要 shape 支持多顏色的解析,詳細情況查看 自定義shape。
//代碼示例
<Geom
color={['cut', (cut)=>{
//some code
if(cut < 1000)
return '#00ff00';
else
return '#ff0000';
}]}
/>
color('#ffffff'), 直接指定顏色常量,不進行數據映射。
//代碼示例
color('l(0) 0:#ffffff 0.5:#7ec2f3 1:#1890ff'),支持線性漸變和放射漸變,具體參見漸變色
③ shape、size、opacity 同 color 的寫法,略
4、更多屬性#
顯示輔助信息的屬性:style, tooltip
額外的控制屬性:adjust, select, setSelect, active, hide
七、組件 - Label#
1、介紹#
https://img2020.cnblogs.com/blog/896608/202003/896608-20200329163853297-781016785.png
2、使用#
① 在每個幾何標記 Geom 內使用 Label 組件。
② 一旦使用
③ content 指定 label 上顯示的文本內容。
Copy
分類圖例
連續圖例
https://img2020.cnblogs.com/blog/896608/202003/896608-20200329180348913-2124419668.png
https://img2020.cnblogs.com/blog/896608/202003/896608-20200329173750050-123615700.png
2、怎么才能有 Legend#
① 只有當
② 一旦使用
3、自定義圖例#
把 custom 設為 ture,表示不使用默認生成的圖例,允許用戶自定義圖例,包括具體的圖例項以及 click、hover 交互。
如果不是特別需要,建議別輕易的開啟 custom,這會讓你多寫很多代碼。
例如:
Copy