摘要:最近阿里正式開源的圖表庫基于技術棧,各個圖表項皆采用了組件的形式,貼近的使用特點。相關文檔組件化阿里的圖表組件手拉手,用開發動態刷新組件文檔地址一安裝通過引入二引用成功安裝完成之后,即可使用或進行引用。
最近阿里正式開源的BizCharts圖表庫基于React技術棧,各個圖表項皆采用了組件的形式,貼近React的使用特點。同時BizCharts基于G2進行封裝,Bizcharts也繼承了G2相關特性。公司目前統一使用的是ECharts圖表庫,下文將對3種圖表庫進行分析比對。
相關文檔
文檔地址:BizCharts
通過 npm/yarn 引入
npm install bizcharts --save
yarn add bizcharts --save
成功安裝完成之后,即可使用 import 或 require 進行引用。
例子:
import { Chart, Geom, Axis, Tooltip, Legend } from "bizcharts";
import chartConfig from "./assets/js/chartConfig";
該示例中,圖表的數據配置多帶帶存入了其他js文件中,避免頁面太過冗雜
module.exports = {
chartData : [
{ genre: "Sports", sold: 275, income: 2300 },
{ genre: "Strategy", sold: 115, income: 667 },
{ genre: "Action", sold: 120, income: 982 },
{ genre: "Shooter", sold: 350, income: 5271 },
{ genre: "Other", sold: 150, income: 3710 }
],
// 定義度量
cols : {
sold: { alias: "銷售量" }, // 數據字段別名映射
genre: { alias: "游戲種類" }
},
title : {
autoRotate: true, // 是否需要自動旋轉,默認為 true
textStyle: {
fontSize: "12",
textAlign: "center",
fill: "#999",
fontWeight: "bold",
rotate: 30
}, // 坐標軸文本屬性配置
position:"center", // 標題的位置,**新增**
}
}
效果預覽:
BizCharts中可以通過dataset(數據處理模塊)來對圖標數據進行處理,該方法繼承自G2,在下文中將對此進行詳細分析。
快速跳轉
BizCharts基于G2進行開發,在研究BizCharts的過程中也一起對G2進行了實踐。
和BizCharts一樣,可以通過 npm/yarn 引入
npm install @antv/g2 --save
yarn add @antv/g2 --save
與BizCharts不同,G2初始化數據并非以組件的形式引入,而是需要獲取需要在某個DOM下初始化圖表。獲取該DOM的唯一屬性id之后,通過chart()進行初始化。
示例:
import React from "react";
import G2 from "@antv/g2";
class g2 extends React.Component {constructor(props) {
super(props);
this.state = {
data :[
{ genre: "Sports", sold: 275 },
{ genre: "Strategy", sold: 115 },
{ genre: "Action", sold: 120 },
{ genre: "Shooter", sold: 350 },
{ genre: "Other", sold: 150 }
]
};
}
componentDidMount() {
const chart = new G2.Chart({
container: "c1", // 指定圖表容器 ID
width: 600, // 指定圖表寬度
height: 300 // 指定圖表高度
});
chart.source(this.state.data);
chart.interval().position("genre*sold").color("genre");
chart.render();
}
render() {
return (
);
}
}
export default g2;
效果圖:
DataSet 主要有兩方面的功能,解析數據(Connector)&加工數據(Transform)。
官方文檔描述得比較詳細,可以參考官網的分類:
源數據的解析,將csv, dsv,geojson 轉成標準的JSON,查看Connector
加工數據,包括 filter,map,fold(補數據) 等操作,查看Transform
統計函數,匯總統計、百分比、封箱 等統計函數,查看 Transform
特殊數據處理,包括 地理數據、矩形樹圖、桑基圖、文字云 的數據處理,查看 Transform
// step1 創建 dataset 指定狀態量
const ds = new DataSet({
state: {
year: "2010"
}
});
// step2 創建 DataView
const dv = ds.createView().source(data);
dv.transform({
type: "filter",
callback(row) {
return row.year === ds.state.year;
}
});
// step3 引用 DataView
chart.source(dv);
// step4 更新狀態量
ds.setState("year", "2012");
以下采用官網文檔給出的示例進行分析
示例一
該表格里面的數據是美國各個州不同年齡段的人口數量,表格數據存放在類型為CVS的文件中
數據鏈接(該鏈接中為json類型的數據)
State | 小于5歲 | 5至13歲 | 14至17歲 | 18至24歲 | 25至44歲 | 45至64歲 | 65歲及以上 |
---|---|---|---|---|---|---|---|
WY | 38253 | 60890 | 29314 | 53980 | 137338 | 147279 | 65614 |
DC | 36352 | 50439 | 25225 | 75569 | 193557 | 140043 | 70648 |
VT | 32635 | 62538 | 33757 | 61679 | 155419 | 188593 | 86649 |
... | ... | ... | ... | ... | ... | ... | ... |
初始化數據處理模塊
import DataSet from "@antv/data-set";
const ds = new DataSet({
//state表示創建dataSet的狀態量,可以不進行設置
state: {
currentState: "WY"
}
});
const dvForAll = ds
// 在 DataSet 實例下創建名為 populationByAge 的數據視圖
.createView("populationByAge")
// source初始化圖表數據,data可為http請求返回的數據結果
.source(data, {
type: "csv", // 使用 CSV 類型的 Connector 裝載 data,如果是json類型的數據,可以不進行設置,默認為json類型
});
/**
trnasform對數據進行加工處理,可通過type設置加工類型,具體參考上文api文檔
加工過后數據格式為
[
{state:"WY",key:"小于5歲",value:38253},
{state:"WY",key:"5至13歲",value:60890},
]
*/
dvForAll.transform({
type: "fold",
fields: [ "小于5歲","5至13歲","14至17歲","18至24歲","25至44歲","45至64歲","65歲及以上" ],
key: "age",
value: "population"
});
//其余transform操作
const dvForOneState = ds
.createView("populationOfOneState")
.source(dvForAll); // 從全量數據繼承,寫法也可以是.source("populationByAge")
dvForOneState
.transform({ // 過濾數據,篩選出state符合的地區數據
type: "filter",
callback(row) {
return row.state === ds.state.currentState;
}
})
.transform({
type: "percent",
field: "population",
dimension: "age",
as: "percent"
});
使用G2繪圖
G2-chart Api文檔
import G2 from "@antv/g2";
// 初始化圖表,id指定了圖表要插入的dom,其他屬性設置了圖表所占的寬高
const c1 = new G2.Chart({
id: "c1",
forceFit: true,
height: 400,
});
// chart初始化加工過的數據dvForAll
c1.source(dvForAll);
// 配置圖表圖例
c1.legend({
position: "top",
});
// 設置坐標軸配置,該方法返回 chart 對象,以下代碼表示將坐標軸屬性為人口的數據,轉換為M為單位的數據
c1.axis("population", {
label: {
formatter: val => {
return val / 1000000 + "M";
}
}
});
c1.intervalStack()
.position("state*population")
.color("age")
.select(true, {
mode: "single",
style: {
stroke: "red",
strokeWidth: 5
}
});
//當tooltip發生變化的時候,觸發事件,修改ds的state狀態量,一旦狀態量改變,就會觸發圖表的更新,所以c2餅圖會觸發改變
c1.on("tooltip:change", function(evt) {
const items = evt.items || [];
if (items[0]) {
//修改的currentState為鼠標所觸及的tooltip的地區
ds.setState("currentState", items[0].title);
}
});
// 繪制餅圖
const c2 = new G2.Chart({
id: "c2",
forceFit: true,
height: 300,
padding: 0,
});
c2.source(dvForOneState);
c2.coord("theta", {
radius: 0.8 // 設置餅圖的大小
});
c2.legend(false);
c2.intervalStack()
.position("percent")
.color("age")
.label("age*percent",function(age, percent) {
percent = (percent * 100).toFixed(2) + "%";
return age + " " + percent;
});
c1.render();
c2.render();
ECharts是一個成熟的圖表庫, 使用方便、圖表種類多、容易上手。文檔資源也比較豐富,在此不做贅述。
ECharts文檔
對比BizCharts和G2兩種圖表庫,BizCharts主要是進行了一層封裝,使得圖表可以以組件的形式進行調用,按需加載,使用起來更加方便。
簡單對比一下三個圖表庫的區別:
初始化圖表:
ECharts:
// 基于準備好的dom,初始化ECharts實例
var myChart = echarts.init(document.getElementById("main"));
BizCharts:
// 以組件的形式,組合調用
import { Chart, Geom, Axis, ... } from "bizcharts";
...
G2:
// 基于準備好的dom,配置之后進行初始化
const chart = new G2.Chart({
container: "c1", // 指定圖表容器 ID
width: 600, // 指定圖表寬度
height: 300 // 指定圖表高度
});
chart.source(data);
chart.render();
配置:
ECharts:
// 集中在options中進行配置
myChart.setOption({
title: {
...
},
tooltip: {},
xAxis: {
data: [...]
},
yAxis: {},
series: [{
...
}]
});
BizCharts:
// 根據組件需要,配置參數之后進行賦值
const cols = {...};
const data = {...};
...
G2:
chart.tooltip({
triggerOn: "..."
showTitle: {boolean}, // 是否展示 title,默認為 true
crosshairs: {
...
style: {
...
}
}
});
事件:
ECharts:事件 api文檔
myChart.on("click", function (params) {
console.log(params);
});
BizCharts:事件 api文檔
{
//do something
}}
/>
G2: 事件 api文檔
chart.on("mousedown", ev => {});
對比以上3種圖表,ECharts和BizCharts相對容易使用,尤其ECharts的配置非常清晰,BizCharts與其也有一定相似之處。BizCharts優勢在于組件化的形式使得dom結構相對清晰,按需引用。G2比較適合需要大量圖表交互時引用,其豐富的api處理交互邏輯相對更有優勢。
本文發布于薄荷前端周刊,歡迎Watch & Star ★,轉載請注明出處。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/1728.html
摘要:所以筆者選擇了,為什么會選擇一是因為它是阿里出品,經歷了一年左右的打磨已經完全適應在使用其次是它支持自由定制,不會像那樣高度封裝,所以在開發復雜圖表的時候會更加得心應手。只是阿里圖表庫中的一員。 實際上,在數據可視化這一塊筆者并沒有很多的開發經歷和經驗,不過正是因為這個問題筆者才決定學習一門數據可視化框架來彌補自己在這一方面的不足。在這個大數據統治的時代,數據能給我們提供前所未有的便捷...
摘要:寫在前面阿里巴巴于去年開放了它的內部圖表庫初版,在這一年的時間里,新增了許多特性,并對渲染細節及渲染性能進行大幅度的調優。在阿里內部多個部門多條業務線里反復打磨了兩年之久后,于去年年底對外開源。 寫在前面 阿里巴巴于去年開放了它的內部圖表庫 Bizcharts 初版,在這一年的時間里,Bizcharts 新增了許多特性,并對渲染細節及渲染性能進行大幅度的調優。 本文將簡單的介紹阿里開源...
摘要:發布,海量圖表供你選擇,豐富模板一鍵創建,提供多種垂直領域模板,快速創建項目,支持風格切換,滿足個性化需求輕松操作頁面管理,海量物料自由搭配,頁面組合可視化操作更得心應手開發調試一體化,集成運行環境零配置運行,開箱即用。 Iceworks 2.7.0 發布,海量圖表供你選擇 Iceworks,豐富模板一鍵創建,提供多種垂直領域模板,快速創建項目,支持風格切換,滿足個性化需求;輕松操作頁...
摘要:發布,海量圖表供你選擇,豐富模板一鍵創建,提供多種垂直領域模板,快速創建項目,支持風格切換,滿足個性化需求輕松操作頁面管理,海量物料自由搭配,頁面組合可視化操作更得心應手開發調試一體化,集成運行環境零配置運行,開箱即用。 Iceworks 2.7.0 發布,海量圖表供你選擇 Iceworks,豐富模板一鍵創建,提供多種垂直領域模板,快速創建項目,支持風格切換,滿足個性化需求;輕松操作頁...
閱讀 815·2023-04-25 20:18
閱讀 2097·2021-11-22 13:54
閱讀 2536·2021-09-26 09:55
閱讀 3898·2021-09-22 15:28
閱讀 2978·2021-09-03 10:34
閱讀 1713·2021-07-28 00:15
閱讀 1635·2019-08-30 14:25
閱讀 1284·2019-08-29 17:16