資料視覺化的本質就是將資料對映到圖形,不同資料型別的資料適合的圖形屬性也不一樣,本章講解資料分類和g2是如何設計資料分類。圖形屬性在下一章節視覺通道中講解。
資料的型別可以按照兩種分類方式:
* 資料自然的分類
* 資料是否連續
資料自然的分類
按照資料的自然分類,可以將數值型別分為:
* 名詞:常見的名詞,不關心順序,比如國家的名稱
* 有序:有序的分類,例如警報資訊,從低到高分為黃色警告、橙色警告和紅色警告
* 間隔:有間隔的數字,不考慮0的意義。例如溫度,0度不代表沒有溫度
* 比例:表示字段之間存在比例關係,0必須有意義。
資料是否連續
按照資料是否連續劃分的方式:
+ 分類(定性)資料,又分為有序的分類和無序的分類
+ 連續(定量)資料,連續不間斷的數值,時間也是一種連續的資料型別
首先我們來看一下下面的資料:
[,,,,]
其中:month 代表月份,temperature 代表溫度,city 代表城市
我們在g2中將資料型別按照是否連續來劃分,每種分類設計成不同的度量(scale),度量用於完成以下功能:
所以每種度量必須包含以下資訊:
g2中提供了下面幾種度量
度量共有的屬性:
屬性名說明
type
度量型別
range
度量轉換的值域,預設是[0,1]
alias
別名,大多數資料集合的欄位名都是英文,有時候需要定義中文名稱,便於在圖例、提示資訊上顯示
ticks
支援的座標點,可以在圖例、座標軸上顯示,座標點的計算後面詳細介紹
tickcount
座標點的個數,不同型別的度量預設值不同
formatter
輸出欄位時的格式化函式,會影響資料在座標軸、圖例、提示資訊(tooltip)上的顯示
linear
連續的資料型別的基類,包含以下特殊的屬性
屬性名說明
min定義域的最小值
max定義域的最大值
tickcount
連續型別的度量,預設生成座標點的個數是5
tickinterval
用於指定座標軸各個標度點的間距,是原始資料之間的間距差值,tickcount 和 tickinterval 不可以同時宣告
nice
是否根據人對數字識別的友好度,來調整min和max。例如 min:3,max: 97,如果nice: true,那麼會自動調整為:min: 0,max: 100
cat分類型別度量的特殊屬性
屬性名說明
values
當前欄位的分類值
g2建立圖表的時候,values欄位一般會自動從資料中取得,但是以下2中情形下需要使用者手動指定
time
time型別是一種特殊的連續型數值,所以我們將time型別的度量定義為linear的子類,除了支援所有通用的屬性和linear度量的屬性外,還有自己特殊的屬性:
屬性名說明
mask
資料的格式化格式 預設:』yyyy-mm-dd』
目前支援 2 種型別的時間(time)型別:
格式化日期時mask的佔位符:
loglog型別的資料可以將非常大範圍的資料對映到乙個均勻的範圍內,這種度量是linear的子類,支援所有通用的屬性和linear度量的屬性,特有的屬性:
屬性名說明
base
log 的基數,預設是2
以下情形下建議使用log度量
powpow型別的資料也是linear型別的乙個子類,除了支援所有通用的屬性和linear度量的屬性外也有自己的屬性:
屬性名說明
exponent
指數,預設是2
timecat
timecat型別的資料,是一種日期資料,但是不是連續的日期。例如代表存在**交易的日期,此時如果使用time型別,那麼節假日沒有資料,折線圖、**圖會斷裂,所以此時使用timecat的度量表示分類的日期,缺省會對資料做排序。
屬性名說明
tickcount
此時需要設定座標點的個數
mask
資料的格式化格式
度量的資訊需要在圖例、座標軸上顯示時,不可能全部顯示所有的資料,那麼就需要選取一些代表性的資料顯示在圖例、座標軸上,我們稱這些資料為ticks
(座標點),不同的型別的度量計算ticks(座標點)的演算法各不一樣,我們這裡提供3類度量ticks(座標點)的計算:
分類度量的計算
分類度量一般情況下不需要計算ticks,直接將所有的分類在圖例、座標軸上顯示出來即可
但是當分類型別的數值過多,同時分類間有順序關係時可以省略掉一些分類例如:
計算時需要使用到的屬性:
分類的ticks計算非常簡單個
整除的場景:
var values= ["第一周","第二週","第三週","第四周","第五周","第六周","第七周","第八周","第九周"];
var tickcount = 5;
// 由於 values.length = 9;
// 平均間隔 step = (9 - 1) / (5 - 1) = 2;
var ticks = ["第一周","第三週","第五周","第七周","第九周"]
不能整除:
var values= ["第一周","第二週","第三週","第四周","第五周"];
var tickcount = 4;
// 由於 values.length = 5;
// 平均間隔 step = (5 - 1) / (4 - 1) = 4/3; 取整 step = 1;
// 捨棄了第四周
var ticks = ["第一周","第二週","第三週","第五周"]
連續資料度量的計算
連續資料型別計算座標點需要考慮以下問題:
連續資料座標點的計算方式如下:
將得到的逼近值乘以前面求得的係數1000,
偽**如下:
var snaparray = [0, 2, 5,10];
var min = 0;
var max = 9003;
var tickcount = 4;
var tickinterval = (max - min) / (tickcount - 1); // 3001;
var factor = getfactor(tickinterval)// 1000,如果value > 10 則不斷除以10 直到除數 1var snapvalue = snap(snaparray, tickinterval / factor, 'ceil'); // 向上逼近,逼近值5
var tickinterval = snapvalue * factor;
var min = snapmultiple(tickinterval, min, 'floor')// 向下取tickinterval的整數倍,0
var max = snapmultiple(tickinterval,max, 'ceil') //向上取tickinterval的整數倍,15000
var ticks = ;
for(var i = min; i <= max; i+= tickinterval)
return ticks;
注意事項
* snaparray 可以進行調整,陣列內部值越多,間距越小,計算出來的tickcount跟預期的差距越小
* min,必須向下取tickinterval的倍數,max ,必須向上取tickinterval的倍數
時間型別的度量計算座標點
時間型別的資料是連續資料,但是不適合連續資料度量的計算方式原因在於:
所以時間型別的度量需要自己的演算法,演算法如下:
注意事項:
本章講解了資料分類和g2如何設計資料分類,並且提供了計算座標點(ticks)的方法,圖例和座標軸顯示的文字全部由本章講解的度量所決定,下一章節講解視覺通道,並講解視覺通道跟資料分類的關係。
g2**:
視覺化框架設計 資料調整
資料對映到圖形時必須進行視覺編碼,視覺編碼包括幾何標記和視覺通道,幾何標記對應著多種圖表型別,視覺通道定義圖形屬性。視覺通道中最具區分度的通道是位置 position 圖形的位置在一些情況下會出現重疊 所以我們需要對資料進行調整,使得圖形在畫布上不互相重疊。g2中支援以下幾種資料調整 除了解決重疊問...
視覺化框架設計 座標系
前面的章節中我們介紹過了視覺通道,視覺通道中識別度最高,同時支援定性 分類 資料和定量資料的視覺通道是位置 position 各種幾何標記最大的差異就在於資料空間位置的對映,我們將這個空間定義成座標系。常見的座標系 g2中主要實現了直角座標系和極座標系,座標系主要完成了兩個功能 視覺化編碼的兩個核心...
視覺化框架設計 視覺通道
資料視覺化的核心內容是視覺化編碼,是將資料資訊對映成視覺化元素的技術。視覺化編碼由兩部分組成 幾何標記 圖形元素 和視覺通道。人類對視覺通道的識別有兩種基本的感知模式。第一種感知模式得到的資訊是關於物件本身的特徵和位置等,對應視覺通道的定性性質和分類性質 第二種感知模式得到的資訊是物件某一屬性在數值...