散點(diǎn)圖重疊的解決方案

散點(diǎn)圖是一種常用來揭示兩個連續(xù)變量之間相關(guān)關(guān)系的可視化方法,當(dāng)兩個變量之間的“連續(xù)性”不是非常強(qiáng)時(shí),散點(diǎn)圖就會面臨很多困難。比如下列數(shù)據(jù):

x y x y x y x y
1 1 2 2 3 3 4 4
1 1 2 2 3 3 4 4
1 1 2 2 3 3 4 4
1 1 2 2 3 3 4 4
1 1 2 1 3 1 4 1
1 2 2 2 3 2 4 2
1 3 2 3 3 3 4 3
1 4 2 4 3 4 4 4

這種類型的數(shù)據(jù),在四等級量表的問卷中非常常見,其中1,2,3,4分別代表四種不同的程度。嚴(yán)格來說,這里的變量類型應(yīng)該是等級變量而非連續(xù)變量,所以如果用散點(diǎn)圖進(jìn)行可視化,會面臨如下問題:

library(ggplot2)
#生成相關(guān)數(shù)據(jù)
dat<-data.frame(x=c(1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4),
                y=c(1,1,1,1,1,2,3,4,2,2,2,2,1,2,3,4,3,3,3,3,1,2,3,4,4,4,4,4,1,2,3,4))
# 散點(diǎn)圖的繪制
qplot(x,y)

image.png

可見,在當(dāng)前數(shù)據(jù)下,散點(diǎn)圖并不能提供任何的信息,這是因?yàn)檫@個數(shù)據(jù)并不是嚴(yán)格的連續(xù)變量。由于大多數(shù)散點(diǎn)具有相同的取值,因此重疊在了一起。在當(dāng)前場景下,如果水平并不多,比如當(dāng)前例子中只有1,2,3,4四個水平,則完全可以處理為列聯(lián)表數(shù)據(jù),使用上一篇博文中提到的馬賽克圖(http://www.itdecent.cn/p/5312c36406e8):

mosaicplot(table(x,y))
image.png

可以發(fā)現(xiàn),這兩個變量有一定的關(guān)聯(lián)性,進(jìn)一步分析,發(fā)現(xiàn)對角線上面積較大,說明(1,1), (2,2), (3,3), (4,4) 這樣的樣本占大多數(shù),因此兩變量之間很可能具有正相關(guān)性。但是,從馬賽克圖上,很難直觀的觀測到“正相關(guān)性”這種信息,因此馬賽克圖并不是一個較好的方案。

有一定數(shù)據(jù)分析及可視化經(jīng)驗(yàn)的人很容易想到,解決散點(diǎn)重疊的一個備選方案為抖動圖,其原理為,給每一個散點(diǎn)施加一個在x軸方向或y軸方向上的隨機(jī)抖動,從而讓本來重疊的散點(diǎn)分開:

ggplot(aes(x=x,y=y),data=dat)+geom_jitter()
image.png

可見,通過抖動圖的方式,這種“正相關(guān)性”逐漸變得清晰,大量的散點(diǎn)分布在圖的對角線上,這條對角線對應(yīng)的方程即 y=x。因此,抖動圖讓原本重疊的散點(diǎn)變得不再重疊,從而解決了散點(diǎn)圖中散點(diǎn)重疊的問題,實(shí)現(xiàn)了對此類數(shù)據(jù)的高效可視化。但是,抖動圖抖動的程度是需要人為選擇的,過大會導(dǎo)致抖動劇烈,掩蓋了原本的規(guī)律,過小則會導(dǎo)致沒有讓重疊的散點(diǎn)分散。

抖動圖是大多數(shù)可視化教程或者博客中推薦的解決散點(diǎn)圖重疊的備選方案,但是本文將提出一種與眾不同的可視化策略,那就是二位密度圖,其基本思路是,既然是因?yàn)橹丿B導(dǎo)致散點(diǎn)圖失效的,那么重疊散點(diǎn)多的地方密度必然較高,而重疊較少的地方密度必然較低,因此很自然能想到二維密度圖:

ggplot(aes(x=x,y=y),data=dat)+geom_density_2d_filled()
image.png

在二維密度圖下,可以清晰的看到那些部位散點(diǎn)的密度大,哪些部位散點(diǎn)的密度小。此時(shí)可以清晰的觀測到,在對角線的位置,散點(diǎn)的密度較大,因此兩個變量的正相關(guān)性可以輕易地被觀測到。

ggplot(aes(x=x,y=y),data=dat)+geom_density_2d_filled()+
  geom_jitter(width = 0.1,height=0.1,colour='red')
image.png

當(dāng)抖動圖和二維密度圖放在一起時(shí),可以非常直觀的看到散點(diǎn)的分布情況,以及兩者之間的相關(guān)關(guān)系。但是,二維密度圖也存在一定的問題,例如不夠精細(xì),當(dāng)模式過于復(fù)雜時(shí),散點(diǎn)會混雜在一起,導(dǎo)致二維密度圖直接將混雜的散點(diǎn)共同估計(jì)其密度,導(dǎo)致其失效,例如類似于正弦曲線:

dat<-data.frame(x=1:20,
                y=sin((1:20)/pi))
ggplot(aes(x=x,y=y),data=dat)+geom_density_2d_filled()+geom_point(colour='red')
image.png

綜上所述,散點(diǎn)圖中散點(diǎn)重疊導(dǎo)致的散點(diǎn)圖失效,可以通過抖動圖解決,當(dāng)關(guān)系比較簡單時(shí)或單調(diào)時(shí),使用二維密度圖可能有更直觀的可視化效果。在可視化的過程中,需要結(jié)合實(shí)際目的進(jìn)行判斷。

您的支持是我更新的動力,希望大家多多收藏,轉(zhuǎn)發(fā),評論,謝謝。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容