# 18 處理重疊點
> 原文: [18 Handling overlapping points](https://serialmentor.com/dataviz/overlapping-points.html)
> 校驗:[飛龍](https://github.com/wizardforcel)
> 自豪地采用[谷歌翻譯](https://translate.google.cn/)
當我們想要顯示大型或非常大的數據集時,我們經常遇到這樣的挑戰:簡單的 *x* - *y* 散點圖不能工作得很好,因為許多點位于彼此的頂部并且部分或完全重疊。如果以低精度或四舍五入的方式記錄數據值,即使在小數據集中也會出現類似的問題,這樣多個觀測值具有完全相同的數值。通常用于描述這種情況的技術術語是“過度繪圖”,即,將許多點繪制在彼此之上。在這里,我將描述您在遇到此挑戰時可以采取的幾種策略。
## 18.1 局部透明和抖動
我們首先考慮的是僅具有中等數量的數據點但具有大量舍入的場景。我們的數據集包含 1999 年至 2008 年間發布的 234 種流行車型的城市燃油效率和發動機排量(圖 18.1 )。在此數據集中,燃油效率以英里/加侖(mpg)為單位進行測量,并四舍五入到最接近的整數值。發動機排量以升為單位測量,并四舍五入到最接近的分升值。由于這種四舍五入,許多車型具有完全相同的值。例如,共有 21 輛汽車具有 2.0 升發動機排量,他們作為一組,只有四種不同的燃油效率值,19, 20, 21 或 22 英里/加侖。因此,在圖 18.1 中,這 21 輛汽車僅由四個不同的點代表,因此 2.0 升發動機看起來比實際上更不受歡迎。此外,該數據集包含兩個帶 2.0 升發動機的四輪驅動車,以黑點表示。然而,這些黑點完全被黃點遮擋,因此看起來沒有配備 2.0 升發動機的四輪驅動車。

圖 18.1:1999 年至 2008 年間發布的流行車型的城市燃油效率與發動機排量。每個點代表一輛汽車。點的顏色編碼傳動系統:前輪驅動(FWD),后輪驅動(RWD)或四輪驅動(4WD)。該圖標記為“不好”,因為許多點都是在其他點上繪制的并且模糊了它們。
改善此問題的一種方法是使用部分透明度。如果我們使各個點部分透明,則過度繪制的點顯示為較暗的點,因此點的陰影反映了圖形位置處點的密度(圖 18.2 )。

圖 18.2:城市燃油效率與發動機排量。因為點已經部分透明,所以位于其他點之上的點現在可以通過其較暗的陰影來識別。
然而,使點部分透明并不總是足以解決過度繪圖的問題。例如,盡管我們可以在圖 18.2 中看到某些點的陰影比其他點更暗,但很難估計每個位置在彼此的頂部繪制了多少個點。此外,雖然陰影的差異清晰可見,但它們并不是不言自明的。第一次看到這個圖形的讀者可能會想知道為什么有些點比其他點更暗,并且不會意識到這些點實際上是多個點疊在一起。在這種情況下有用的一個簡單技巧是對點施加少量抖動,即在 *x* 或 *y* 或兩者的方向上,隨機移動少量點。對于抖動,很明顯,較暗的區域來自彼此重疊的點(圖 18.3 )。此外,現在,代表具有 2.0 升發動機的四輪驅動汽車的黑點第一次清晰可見。

圖 18.3:城市燃油效率與發動機排量的關系。通過向每個點添加少量抖動,我們可以使得過度繪制的點更清晰可見,而不會顯著扭曲繪圖的消息。
抖動的一個缺點是它確實會改變數據,因此必須小心執行。如果我們抖動太多,我們最終會在不代表底層數據集的位置放置點。結果是誤導性的數據可視化。參見圖 18.4 作為示例。

圖 18.4:城市燃油效率與發動機排量。通過向點添加過多抖動,我們創建了一個無法準確反映底層數據集的可視化。
## 18.2 2D 直方圖
當單個點的數量變得非常大時,部分透明度(有或沒有抖動)將不足以解決過度繪圖問題。通常會發生的是,點密度高的區域將顯示為深色的均勻斑點,而在點密度低的區域中,各個點幾乎不可見(圖 18.5 )。而改變個別點的透明度水平將改善這些問題中的一個,同時使另一個問題惡化;沒有透明度設置可以同時解決這兩個問題。

圖 18.5:2013 年從紐瓦克機場(EWR)起飛的所有航班的起飛延誤(分鐘)與航班起飛時間的關系。每個點代表一次起飛。
圖 18.5 顯示超過 100,000 個單獨航班的起飛延誤,每個點代表一次航班起飛。盡管我們已經使各個點相當透明,但是它們中的大多數只是在 0 到 300 分鐘的起飛延誤之間形成黑帶。這個帶子模糊了大多數航班是否準時起飛或大幅延誤(比如 50 分鐘或更長時間)。同時,由于點的透明度,最延誤的航班(延誤 400 分鐘或更長時間)幾乎看不到。
在這種情況下,我們可以制作 2D 直方圖,而不是繪制單個點。 2D 直方圖在概念上類似于第七章中討論的一維直方圖,但現在我們將數據在二維中分桶。我們將整個 *x* - *y* 平面細分為小矩形,計算落入每個桶的觀測值數量,然后按該計數來著色矩形。圖 18.6 使用這種方法,顯示了起飛延誤數據的結果。該可視化清晰地突出了航班起飛數據的幾個重要特征。首先,白天(早上 6 點到晚上 9 點)的絕大多數航班,實際上是在沒有延誤甚至提前(負延誤)的??情況下起飛的。然而,一定數量的航班有很大的延誤。此外,一架飛機在當天的起飛得越晚,它的延誤就越大。重要的是,起飛時間是實際的起飛時間,而不是預定的起飛時間。所以這個圖形并不一定告訴我們計劃提前起飛的飛機從未經歷過延誤。然而,它告訴我們的是,如果飛機提前起飛,它要么沒有延誤,要么在極少數情況下延誤大約 900 分鐘。

圖 18.6:以分鐘為單位的起飛延誤與航班起飛時間的關系。每個彩色矩形代表當時起飛的起飛延誤為指定值的所有航班。著色表示該矩形的航班數。
作為將數據合并為矩形的替代方法,我們也可以將其分成六邊形。這種方法首先由 Carr 等人(1987)提出,具有以下優點:比等面積方形中的點,六邊形中的點平均更接近其中心。因此,彩色六邊形比彩色矩形更準確地表示數據。圖 18.7 顯示六邊形分桶而非矩形分桶的航班起飛數據。

圖 18.7:以分鐘為單位的起飛延誤與航班起飛時間的關系。每個彩色六邊形代表當時起飛的起飛延誤為指定值的所有航班。著色表示該六邊形的航班數。
## 18.3 等值線
我們還可以估計繪圖區域內的點密度,并用等值線指示不同點密度的區域,而不是將數據點分組為矩形或六邊形。當點密度在 *x* 和 *y* 維度上緩慢變化時,該技術很有效。
作為這種方法的一個例子,我們返回第 12 章節的藍鳥數據集。圖 12.1 顯示了 123 只藍鳥的頭長和體重之間的關系,并且這些點之間存在一些重疊。我們可以通過使點更小和部分透明,來更清楚地突出點的分布,并將它們繪制在等值線之上(圖 18.8 ),它描繪點密度相似的區域。我們可以通過對由等值線包圍的區域進行著色,來進一步增強對點密度變化的感知,對于表示較高點密度的區域使用較暗的顏色(圖 18.9 )。

圖 18.8:123 個藍鳥的頭長與體重的關系,如圖 12.1 所示。每個點對應一只鳥,線條表示點密度相似的區域。點密度朝著圖的中心增加,體重接近 75g,頭長在 55mm 和 57.5mm 之間。數據來源:歐柏林學院的 Keith Tarvin

圖 18.9:123 個藍鳥的頭長與體重的關系。這個圖與圖 12.1 幾乎相同,但現在等值線包圍的區域用越來越深的灰色陰影著色。這種陰影產生了更強的視覺印象,即點密度朝著點云的中心增加。數據來源:歐柏林學院的 Keith Tarvin
在第 12 章中,我們還分別研究了雄鳥和雌鳥的頭長和體重之間的關系(圖 12.2 )。我們可以通過為雄鳥和雌鳥分別繪制彩色等值線來繪制等值線圖(圖 18.10 )。

圖 18.10:123 個藍鳥的頭長與體重的關系。如圖 12.2 ,我們還可以在繪制等值線時通過顏色指示鳥類的性別。該圖突出顯示了雄鳥和雌鳥的點的分布是如何不同的。特別是,雄鳥在繪圖區域的一個區域中更密集,而雌鳥則更加分散。數據來源:歐柏林學院的 Keith Tarvin
繪制不同顏色的多組等值線,可能是一次顯示多個點云分布的強大策略。但是,這種技術需要謹慎使用。它僅在具有不同顏色的組的數量較小(兩到三個),并且組明確分離時才有效。否則,我們最終會得到一條毛球,它的不同顏色的線彼此交叉,并且根本不顯示任何特定的圖案。
為了說明這個潛在的問題,我將使用鉆石數據集,其中包含 53,940 顆鉆石的信息,包括它們的價格,重量(克拉)和切割。圖 18.11 將此數據集顯示為散點圖。我們看到了過度繪圖的明顯問題。有許多不同顏色的點在彼此之上,除了鉆石落在價格克拉譜上的整體形狀之外,不可能辨別出任何東西。

圖 18.11:53,940 枚單顆鉆石的鉆石價格與其克拉值的關系。每顆鉆石的切割都用顏色表示。該圖被標記為“不好”,因為大量的過度繪圖使我們無法辨別不同鉆石切割的任何規律。數據來源:Hadley Wickham,ggplot2
我們可以嘗試為不同的切割質量繪制彩色等值線,如圖 18.10 。但是,在鉆石數據集中,我們有五種不同的顏色,這些組嚴重重疊。因此,等值線圖(圖 18.12 )并沒有比原始散點圖好很多(圖 18.11 )。

圖 18.12:鉆石價格與克拉值的關系。如圖 18.11 ,但現在個別點已被等值線所取代。得到的圖仍然標記為“不好”,因為等值線全部位于彼此之上。無論是單個切割的點的分布還是整體的點的分布都不能被辨別出來。數據來源:Hadley Wickham,ggplot2
在獨立的繪圖面板中繪制每個切割質量的等值線,會有所幫助(圖 18.13 )。在一個面板中繪制它們的目的,可能是為了實現組之間的視覺比較,但是圖 18.12 非常嘈雜,無法進行比較。相反,在圖 18.13 中,背景網格使我們能夠通過關注等值線相對于網格線的確切位置,來對切割質量進行比較。 (通過在每個面板中繪制部分透明的單個點而不是等值線,可以實現類似的效果。)

圖 18.13:鉆石價格與克拉值的關系。在這里,我們從圖 18.12 中獲取了密度等值線,并為每個切割分別繪制它們。我們現在可以看到,更好的切割(非常好,優質,理想)往往比較差的切割(一般,良好)具有更低的克拉值,但是每克拉的價格更高。數據來源:Hadley Wickham,ggplot2
我們可以提出兩個主要趨勢。首先,更好的切割(非常好,優質,理想)往往比較差的切割(一般,良好)具有更低的克拉值。回想一下克拉是衡量鉆石重量的指標(1 克拉 = 0.2 克)。更好的切割往往會產生較輕的鉆石(平均而言),因為需要去除更多的材料來創造它們。其次,在相同的克拉值下,更好的切割傾向于更高的價格。要查看此模式,請查看 0.5 克拉的價格分布示例。對于更好的切割,分布向上移動,特別是對于具有理想切割的鉆石而言,其分布比具有一般或良好切割的鉆石高得多。
### 參考
```
Carr, D. B., R. J. Littlefield, W. L. Nicholson, and J. S. Littlefield. 1987. “Scatterplot Matrix Techniques for Large N.” J. Am. Stat. Assoc. 82: 424–36.
```
- 數據可視化的基礎知識
- 歡迎
- 前言
- 1 簡介
- 2 可視化數據:將數據映射到美學上
- 3 坐標系和軸
- 4 顏色刻度
- 5 可視化的目錄
- 6 可視化數量
- 7 可視化分布:直方圖和密度圖
- 8 可視化分布:經驗累積分布函數和 q-q 圖
- 9 一次可視化多個分布
- 10 可視化比例
- 11 可視化嵌套比例
- 12 可視化兩個或多個定量變量之間的關聯
- 13 可視化自變量的時間序列和其他函數
- 14 可視化趨勢
- 15 可視化地理空間數據
- 16 可視化不確定性
- 17 比例墨水原理
- 18 處理重疊點
- 19 顏色使用的常見缺陷
- 20 冗余編碼
- 21 多面板圖形
- 22 標題,說明和表格
- 23 平衡數據和上下文
- 24 使用較大的軸標簽
- 25 避免線條圖
- 26 不要走向 3D
- 27 了解最常用的圖像文件格式
- 28 選擇合適的可視化軟件
- 29 講述一個故事并提出一個觀點
- 30 帶注解的參考書目
- 技術注解
- 參考