視覺化框架設計 資料型別

2022-03-08 18:20:58 字數 4514 閱讀 1838

資料視覺化的本質就是將資料對映到圖形,不同資料型別的資料適合的圖形屬性也不一樣,本章講解資料分類和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中主要實現了直角座標系和極座標系,座標系主要完成了兩個功能 視覺化編碼的兩個核心...

視覺化框架設計 視覺通道

資料視覺化的核心內容是視覺化編碼,是將資料資訊對映成視覺化元素的技術。視覺化編碼由兩部分組成 幾何標記 圖形元素 和視覺通道。人類對視覺通道的識別有兩種基本的感知模式。第一種感知模式得到的資訊是關於物件本身的特徵和位置等,對應視覺通道的定性性質和分類性質 第二種感知模式得到的資訊是物件某一屬性在數值...