對任意的可視化圖形,都須要指定位置比例尺,也就是指定圖形上數據所處的位置。若是咱們不能將數據映射到位置——即便只是沿着座標軸依次排列,那就談不上數據可視化了。在常規的 2d 空間內,肯定一個「點」的位置須要兩個數據,所以咱們須要兩個的比例尺,一般狀況下(但不必定)是 x 軸和 y 軸比例尺。咱們還須要指定這些比例尺的相對幾何排列。一般來講,x 軸是沿水平分佈,而 y 軸則是沿着垂直方向,但咱們也有其餘選擇。好比,咱們可讓 y 軸相對於 x 軸某個角度分佈,或者一個軸沿圓形(circle)分佈,而另一個軸沿徑向(radial)分佈。一組位置比例尺,和它們相對幾何排列的組合就叫作座標系(coordinate system)。3d
使用做爲普遍的可視化座標系就是 2d 笛卡爾座標系(2d Cartesian coordinate system),其中每一個點的位置都由 x 值和 y 值來決定。x 軸和 y 軸相互垂直分佈,呈正交座標系,數據值沿兩軸間隔分佈(圖 3.1)。兩軸都是基於位置呈連續型比例尺分佈,能夠用來標示正負實數。要徹底應用座標系的話,咱們須要指定每一個軸所覆蓋的輸出範圍(range)。在圖 3.2 中,x 軸的 range 是 -2.2 到 3.2,而 y 軸是 -2.2 到 2.2。range 限制了只有落在這個區域中間的點纔會被展現,range 以外的數據都會沒法顯示。code
圖 3.1:一個標準的笛卡爾座標系。一般水平方向座標軸稱爲 x 軸,而垂直方向爲 y 軸,兩軸交叉生成了等距間隔的網格系統。圖例中 x 和 y 軸網格線都按照 1 個單元分隔,點(2, 1)x 軸距離原點右側 2 個單位,y 軸距離原點上方 1 個單位。而點(-1, -1)距離原點左側 1 個單位,下方 1 個單位。orm
一般數據不只僅是純數字類型的,而是自帶「單位」的。舉例來講,要測量溫度,須要確認是攝氏度(℃)仍是華氏度(℉);要測量距離,那麼單位是千米仍是英里,要測量時間,究竟是分鐘、小時仍是天呢?在笛卡爾座標系中,網格線之間的沿着座標軸方向的間距對應的就是這些單位之間的離散間隔。以溫度比例尺爲例,咱們能夠每隔10℉ 設置一條網格線,若是是距離的比例尺,咱們能夠每隔 5KM 設置一條網格線。cdn
笛卡爾座標系中一般會兩條座標軸表明兩類數據單元,很天然的,咱們能夠將兩類變量分別映射到 x 軸 和 y軸。在圖 2.3 中,咱們繪製了一年中 溫度 vs 月份的圖表,其中 y 軸表明了華氏溫度,每隔 20℉ 繪製一條網格線,x 軸 表明月份,每隔 3 個月繪製一條網格線。不論座標軸表明了哪些不一樣的數據單元,咱們能夠相對於某一條座標軸對另一條作壓縮或者拉伸,同時保持有效的數據可視化(圖 3.2)。哪一種圖表類型更加合適取決於想對外傳遞的信息,高且窄的圖形強調了 y 軸的變化趨勢,短而寬的圖形則相反。理想狀況是:咱們但願選擇一個合適的寬高比,以確保任何位置上的重要差別都是顯而易見的。htm
圖3.2:Houston 日均溫度變化趨勢圖。溫度映射到 y 軸,日期則映射到 x 軸。 圖(a), (b), (c) 三部分都是同樣的數據,可是分別投射在不一樣寬高比的範圍內。這三部分都是有效的數據可視化案例(取決於想傳遞的信息)。blog
還有一種場景是,若是 x 軸和 y 軸 表明的同一個數據單元,那麼兩條軸網格線的間距必須是徹底相等的,由於此時沿着座標軸方向的網格間距表明了一樣大小的數據。圖 3.3 中,x 軸 和 y 軸分別表明兩個城市一年內溫度隨日期的變化趨勢,咱們須要保證沿着兩條座標軸方向數據是徹底同樣的,因此兩個方向的網格線間距也是徹底一致的,網格線之間就交叉造成了正方形。ip
圖 3.3:Houston 和 San Diego 每日溫度對比圖,其中 1月、4月、7月和10月的 1 號都添加了輔助標記。(a) 圖展現華氏攝氏度,(b)圖展現攝氏度。ci
你可能會好奇,若是修改了座標軸的數據單元會怎麼樣,畢竟每一個人均可能偏好不一樣的單位類型。修改數據單元是一種線性變換(linear transformation),基於原來的數據單元進行數據的相加、相減或相乘。幸運的是,笛卡爾座標系在這種線性變換下是不會變化的,只要對座標軸進行相應的修改,圖形就不會改變。在圖 3.3 中,(a)圖和(b)圖顯示同一組數據,可是(b)圖展現攝氏度,而(a)圖展現華氏度,即便網格線的位置和間距不一樣,但兩個圖表看上去徹底一致。get
在笛卡爾座標系中,沿着座標軸分佈的網格線無論是按照數據單元,仍是實際位置都是均勻分佈的。咱們將這種位置比例尺(position scale)稱爲線性的(linear)。線性比例尺可以準確無誤地呈現數據,儘管如此,某些場景下咱們非線性比例尺也會被優先考慮。非線性比例尺中,均勻分佈的數據單元可能會對應到不均勻的位置間距,或者相反,均勻間隔的位置間距可能會對應到不均勻分佈的數據單元。
最多見的非線性比例尺就是對數比例尺(log scale)。對數比例尺對乘法來講是線性的,這樣的話每個單位制就也就對應於上一個值乘以固定的數字(基數)。要建立一個對數比例尺,咱們須要將原始數據進行對數轉換後取冪值(exponentiate)並映射到座標軸上。圖 3.4 展現了這個轉換過程,須要被轉換的數據是 1,3.16,31.6 和 100。你可能會以爲數字 3.16 有些奇怪,實際上在對數比例尺中,3.16 是介於 1 和 10 之間的中間值,而 31.6 是介於 10 到 100 之間的中間值。從數學的角度來講:√10 ≈ 3.16
,而 10^1.5 ≈ 31.6
。
圖 3.4:線性比例尺和對數比例尺之間的關係。數據 1,3.16,10,31.6,100 在線性比例尺上對應點的位置是均勻分佈的。咱們能夠將原始數據直接映射到線性比例尺(最上方),也能夠對數據進行對數轉換後顯示在線性比例尺(第 2 張),也能夠直接將原始數據映射到對數比例尺(第 3 張)。值得一提的是,對數比例尺座標軸 title 應該是原始變量,而不能是變量對數轉換後的值(最後一張)。
在數學的角度,在線性比例尺上應用對數轉換後的數據,和在對數比例尺上繪製原始數據沒有什麼不一樣(圖 3.4),惟一的區別在於座標軸的刻度。在大多數狀況下,對數比例尺上的刻度標記是更優的選擇,由於讀者能夠直觀地看到原始數據,而不用面臨着去作二次計算的壓力。一樣的,對數比例尺也能夠減小讀者對對數基數混淆的風險。當咱們處理對數數據時,咱們可能會對使用天然對數(e)仍是基於 10 的對數感到困惑。含糊不清的標記一點都不罕見,以 「log(x)」 爲例,它根本沒有指定對數基數!個人建議是,在處理對數轉換時始終指定基數,在繪製對數轉換後的數據時,在座標軸標籤上始終指定基數。
對數比例尺上數據相乘看上去就像線性比例尺上數據的相加,因此對數比例尺自然適合於通過乘法、除法處理的數據,值得一提的是,對數的比例值須要展現在對數比例尺上。舉例來講,我選取了得克薩斯州各縣常駐居民數,並將其除以全部縣的居民人數中位數。獲取到的的結果是可能大於 1,也可能小於 1,若是剛好等於 1,那麼所在縣的人口數量就是中位數。咱們將獲取的值映射到對數比例尺上,咱們能夠清楚的看到得克薩斯州人口數量均勻地分佈在中位數附近,而且人口最多的縣比中位數多 100 倍左右,而最少的縣比中位數少 100 倍左右(圖 3.5)。相比之下,相同的數據在線性比例尺中,線性比例尺模糊了人口數量位於中位數的縣和遠低於中位數的縣之間的差別(圖 3.6)。
圖 3.5:得克薩斯州各縣人口數量相對於中位值(median),選中的縣經過標籤高亮顯示。虛線表明中位值 1,對應全州人口數位於中位值的縣。人口最多的縣相比中位值大約多 100 倍,而人口最少的縣比中位值少 100 倍左右。
圖 3.6:得克薩斯州各縣人口數量相對於中位值(median)。在線性比例尺上,咱們過度放大了 > 1 的比例,而忽視了 < 1的比例。通常來講,比例值不該該展現在線性比例尺上。
在對數比例尺上,數字 1 是一個自然的中間點,就像線性比例尺上的 0。能夠理解爲大於 1 的值是基於對數作乘法,而小於 1 的值是基於對數作除法。例如,咱們能夠這樣寫:10 = 1 * 10
,而 0.1 = 1 / 10
,數字 0 則永遠不會出如今對數比例尺上,只會無限遠離 1,能夠理解爲 log(0) = -∞
,或者考慮從 1 到 0,須要除以無窮大才能趨近爲 0(1 / ∞ = 0
)。
對數比例尺適用於當數據集中的數據差別特別大時。對於圖 3.5 和圖 3.6 所示,人口最多的縣(4,092,459)和最少的縣(82)差別巨大,即便咱們沒有經過除以中位數轉換爲比例值,咱們也應該考慮用對數比例尺來實現。但若是有一我的口數爲 0 的縣應該怎麼作,這個時候咱們沒法直接用對數比例尺實現,由於log(0)
會無限趨近負無窮。這種時候,建議採用平方根(square root)進行數據轉換。相似於對數比例尺,平方根比例尺也是將極大的數據壓縮爲較小的範圍,只是容許存在 0。
圖 3.7:指數比例尺和平方根比例尺之間的關係。原始值 0, 1, 4, 9, 16, 25, 36, 49,在平方根比例尺上均勻分佈,由於平方轉換後的值就是 0 到 7。咱們能夠直接將原始值映射到線性比例尺上,也能夠平方根轉換後映射到線性比例尺上,最後也能夠直接映射到平方根比例尺上。
我認爲平方根比例尺存在兩個問題。首先,在線性比例尺上每個單位值對應於固定數值的加減操做,而對數比例尺上對應乘除操做,而平方根比例尺上不存在這樣的規則,平方根比例尺上每個單位值取決於開始時候的刻度值。其次,咱們不清楚如何最優地將刻度分佈在座標軸上。爲了得到均勻分佈的網格,咱們必須將它們放置在正方形上,可是每隔 1 個數字(0,4,16,36)的刻度分佈會很是不直觀,或者咱們按照線性間隔(10,20,30,40)分佈,但這樣會致使在座標軸低點標籤(ticks)太少,而在高點標籤太多。在圖 3.7 中,我選擇的方案是[0, 1, 5, 10, 20, 30, 40],這些值沒有太多的邏輯,只是能夠更合理地覆蓋數據範圍。
儘管平方根比例尺存在這些問題,但仍然是有效的位置比例尺,在某些場景下仍然有適用性。就像對數比例尺自然適合比率(ratio)同樣,平方根比例尺仍然適合平方根處理的數據。有一個適合作平方根運算的場景是地理區域的面積處理。若是咱們對地理區域的面積作平方根運算,咱們能夠獲知該區域從北到南,或者從東到西的線性距離。若是咱們想要知道在一個地區開車須要多長時間,這些範圍多是相關的。圖 3.8 顯示了美國東北部各州基於線性和平方根比例尺的面積值。儘管這些區域之間差別很大(圖 3.8 a),可是決定開車時間的會更加靠近平方根比例尺上的數據(圖3.8 b)。
圖 3.8:美國東北部各州的面積分布,(a)圖基於線性比例尺,(b)圖基於平方根比例尺。
目前咱們所遇到的座標系都是兩個直線座標軸之間以合適的角度鏈接,即便座標軸創建的是非線性映射關係。除此之外,還有一類座標系擁有曲線軸的座標軸。例如在極座標系(polar coordinate system)下,咱們經過角度(angle)和徑向距離(radial distance)來肯定點的位置,所以角度座標軸是環形的(圖3.9)。
笛卡爾座標系和極座標系之間的關係。(a)笛卡爾座標系上的三個點,(b)一樣的三個點在極座標上的位置。極座標系中的角度軸對應於笛卡爾座標系中的 x 軸,而徑向軸則對應於 y 軸。這裏環形角度軸對應的值是 0 到 4,由於環形的緣由,0 和 4 是位於同一點上。
極座標系適合於展現週期型的數據,使得數據集一端的值無縫鏈接到另外一端的值。以一年的日期爲例,12 月 31 日是一年的最後一天,一樣是新年開始的前一天。若是咱們要顯示一年中某些變量的變化,在極座標系上用角度軸來表明日期就比較合適了。讓咱們將這個概念應用到圖 2.3 中的平均溫度變化圖。經過在極座標系中繪製溫度變化圖,咱們強調了溫度隨着日期變化的週期性(圖3.10)。對比圖 2.3,極座標展系示了Houston、San Diego、Chicago 三個城市從 10月份到1月份之間氣溫是多麼的接近,而在笛卡爾座標系上,是很可貴出這個結論的,此時12月和1月分別位於座標軸的兩個端,從視覺上是割裂的。
圖3.10:美國四州每日溫度變化圖,以極座標顯示。距離中心點的徑向距離表明華氏溫度值,一年中的日期在 6 點鐘開始逆時針排列。
第二類適合曲線軸展現的場景是地理數據展現,好比地圖。地球上的位置是經過經度和緯度來肯定的,但因爲地球是一個球體,在笛卡爾座標系上繪製是有誤導性的,不推薦使用。相反,咱們使用各類類型的非線性投影,試圖最大限度地減小人工修飾。
圖3.11:四種不一樣類型的投影方式下的世界地圖。笛卡爾座標將每一個位置的經緯度投射座標軸上。這種映射關係致使在 3D 球體上其真實的面積和角度失真。interrupted Goode homolosine projection 投影則完美地表明瞭真實表面面積,代價是將一些陸地區域分紅單獨的部分,最著名的是格林蘭島和南極洲。Robinson 投影和 Winkel tripel 投影都是在角度和麪積之間取得了平衡,他們一般都用於地圖的全景。