散點圖,是一種常見的展示2組及以上連續變量關系的可視化方式之一。本文主要介紹如何給普通的散點圖“鑲邊”——添加邊際圖。我們知道R作圖思路就是一層一層的疊加上去,同理可得繪制一個如下所示的圖,我們也應該是先定位X、Y軸,再繪制一個散點圖,最后疊加上一個邊際圖。

01.涉及的R包
1.ggplot2
最常用也是最萬能的繪圖R包。
2.ggExtra
用于給散點圖添加邊際圖。
3.hexbin
hexbin包的hexbin函數應用于數據量太大、且有數據重疊、普通散點圖可視化效果變差的情況。
02.開始畫圖
1.載入R包
install.packages("ggExtra")
install.packages("hexbin")
library(ggExtra)
library(hexbin)
library(ggplot2)
2.繪制散點圖
本文數據以R自帶的diamonds數據為例,散點圖的基本語法如下,數據集、X軸、Y軸,最后是散點層。
p <- ggplot(data=diamonds, mapping = aes(x = carat,y = price)) +
geom_point(shape=19 ,alpha = .5,size=1.5)

一個最基礎不加任何修飾的散點圖就繪制好了,接下來要做的工作就是思考如何美化它。當數據量特別大,散點都堆疊在一起,很多區域很難辨識,我們可以考慮使用hexbin函數繪制高密度散點圖。hexbin函數將二元變量的封箱放到六邊形單元格中,且通過圖例顏色標定每一個區域數據點的數量顏色越深則散點密度越大。
p <- ggplot(data=diamonds,mapping = aes(x = carat,y = price)) +
geom_point(shape=19 ,alpha = .01,size=0.5)+
stat_binhex()

調整圖片的細節
p <- ggplot(data=diamonds,mapping = aes(x = carat,y = price)) +
geom_point(shape=19 ,alpha = .01,size=0.5)+
stat_binhex()+
scale_fill_gradient(low = "lightblue", high = "red",limits =c(0,6000)) + #設置映射顏色和圖例尺度
theme_bw() +
theme(
legend.position = "left", #調整圖例的位置
axis.title = element_text( family = "sans",size = 17,face = "bold",color = "gray25"),#設置X、Y軸標題字體、大小以及顏色
axis.text = element_text( family = "sans",size = 15,face = "bold"), #設置X、Y軸標簽字體、大小以及顏色
title = element_text( family = " sans ",size = 20,face = "bold"), #設置圖片標題的字體、大小以及顏色
plot.title = element_text(margin = margin(t = 10, b = 10)),#控制標題與圖表之間的距離
axis.title.x = element_text(margin = margin(t = 15),family = "sans"),
axis.title.y = element_text(margin = margin(r = 15) ,family = "sans"),#調整X、Y軸標題距離繪圖區的距離
legend.title = element_blank(), #去除圖例的標題
panel.border = element_rect( linetype = "solid", size = 2,color = "gray50") #繪圖區外框顏色、線型以及粗細
) +
labs(title="Add marginal to scatter",hjust=0.5) + xlab("carat") + yl
ab("price") #添加標題

3.添加邊際圖
邊際圖是疊加在散點圖上的,它有多個類型可供選擇。
參數解讀:
p:之前繪制好的散點圖
type:添加的邊際圖類型
density:密度曲線
histogram:直方圖
boxpot:箱線圖
violin:小提琴圖
densigram:密度圖與直方圖的結合
margins:邊際圖添加在哪一方向
both:X、Y軸都添加
X:只添加X軸
Y:只添加Y軸
size:主圖與邊際圖的比例關系
fill:填充顏色
color:描邊顏色
p1 <- ggMarginal(p, type ="densigram", margins = "both", fill="#A7B9D7", color="steelblue")

一副完整的散點圖加邊際圖就繪制好了。邊際圖也可以根據需要嘗試各樣的類型:
只添加X軸的密度圖
ggMarginal( p, type = "density", margins = "x", fill = "#A7B9D7", color="steelblue")

只添加Y軸的小提琴圖
ggMarginal( p, type = "violin", margins = "y", fill = "red", color="steelblue" )

