(資料科學學習手札55)利用ggthemr來美化ggplot2影象
一、簡介
R中的ggplot2是一個非常強大靈活的資料視覺化包,熟悉其繪圖規則後便可以自由地生成各種視覺化影象,但其預設的色彩和樣式在很多時候難免有些過於樸素,本文將要介紹的ggthemr包專門針對原生ggplot2影象進行美化,掌握它之後你就可以創作出更具特色和美感的資料視覺化作品。
二、基礎內容
2.1 安裝
不同於常規的R包,ggthemr並沒有在CRAN上釋出,因此我們需要使用devtools中的install_github()直接從github上安裝它,參照github上ggthemr的專案說明頁:
library(devtools) install_github('cttobin/ggthemr')
筆者在遵循上述步驟時不太順利,遇到了如下錯誤:
不過不用擔心,按照上述的錯誤提示,我們開啟對應目錄,找到了對應的壓縮包:
實際上我們通過上述語句已經將ggthemr的壓縮包下載到本地如上圖所示,所以我們可以很容易地使用手動安裝本地壓縮包的形式來完成ggthemr的安裝(注意要吧.tar格式改為.tar.gz格式,我想這可能是install_github()安裝失敗的原因):
經過上述步驟我們便完成了ggthemr的安裝準備工作;
2.2 傻瓜式用法
在我之前寫得某篇文章中使用過Python中matplotlib.pyplot.style,僅僅使用style.use()這個語句,便可傻瓜式地載入各種精美的自適應繪圖主題,在ggthemr中也有類似的功能,我們在利用ggplot2建立影象的語句之前,加上ggthemr('主題名稱'),便可簡單套用多種內建主題,下面是幾個簡單的例子:
rm(list=ls()) library(ggplot2) library(ggthemr) data(mpg) data <- mpg #chalk風格 ggthemr('chalk') p1 <- ggplot(data=data, aes(displ, hwy))+ geom_point(mapping = aes(shape=factor(cyl)))+ geom_smooth(mapping = aes(displ,hwy,colour=factor(cyl))) print(p1)
#dust風格 ggthemr('dust') p2 <- ggplot(data=data, aes(displ, hwy))+ geom_point(mapping = aes(shape=factor(cyl)))+ geom_smooth(mapping = aes(displ,hwy,colour=factor(cyl))) print(p2)
#flat風格 ggthemr('flat') p3 <- ggplot(data=data, aes(displ, hwy))+ geom_point(mapping = aes(shape=factor(cyl)))+ geom_smooth(mapping = aes(displ,hwy,colour=factor(cyl))) print(p3)
而官方文件中提到可以用ggthemr_reset()來恢復ggplot2預設風格,但筆者經過實踐發現這個函式並不能徹底抹除之前施加的主題模式,因此這裡不細說,讀者們可以自行嘗試;
三、自定義主題
儘管ggthemr內建了很多風格迥異的主題,有的過於花哨,有的又過於商務硬朗,除了直接套用這些主題,我們還可以自己建立新的主題以加入自己對構圖的想法:
3.1 Palettes(調色盤)
palette決定了影象中所有元素的顏色,包括所有圖層、背景、網格線等,而swatch則專門用於控制圖層元素的配色方案,我們使用define_palette()來構造自定義調色方案,其主要引數如下:
swatch:一個顏色向量,用於定義圖層元素的配色方案(要注意影象中需要用到的色彩數量要小於等於swatch的向量長度,否則會報錯)
gradient:一個長度為2的向量,lower位置和upper位置用於控制梯度色彩的上下限
background:設定背景色彩
text:設定文字部分的字型顏色
line:設定座標軸顏色
gridline:控制網格線的顏色
下面我們自定義一個色彩簡單的主題:
demo <- define_palette( swatch = c('black', 'red', 'green', 'blue', 'brown', 'purple', 'yellow'), gradient = c(lower = 'red', upper = 'green') ) ggthemr(demo)
下面來看看應用上述主題之後的影象效果:
rm(list=ls()) library(ggplot2) library(ggthemr) data(mpg) data <- mpg demo <- define_palette( swatch = c('black', 'red', 'green', 'blue', 'brown', 'purple', 'yellow'), gradient = c(lower = 'red', upper = 'green') ) ggthemr(demo) p <- ggplot(data=data, aes(displ, hwy))+ geom_point(mapping = aes(shape=factor(cyl)))+ geom_smooth(mapping = aes(displ,hwy,colour=factor(cyl))) print(p)
因為我們的demo主題中還設定了色彩梯度,下面我們繪製密度圖(此例來自我的 (資料科學學習手札38)ggplot2基本圖形簡述 ):
data <- data.frame(matrix(rnorm(200),nrow=100)) p <- ggplot(data, aes(x = X1, y = X2)) + stat_density2d(aes(fill = ..density..), geom = "raster", contour = F) p
可以看到,密度圖中色彩在預設的紅色與綠色之間過渡;
3.2 ggthemr()的其他關鍵引數
前文中我們使用函式ggthemr()來掛載主題,而除了最關鍵的主題引數之外,ggthemr()還有若干控制其他影象樣式的引數,如下:
layout:用於網格線樣式,有clean、clear、minimal、plain、scientific可選,預設clear
spacing:用於控制影象在圖床上的緊湊程度,越高意味著影象被擠壓得越嚴重,預設1.6,下面分別為0,1,2時的示例:
text_size:用於控制文字部分字型大小,預設12
type:用於控制背景區域填充的形式,當'inner'時如下:
當設定為'outer'時如下:
line_weight:設定座標軸和網格線的寬度,預設0.5
set_theme:邏輯型變數,控制是否啟動palette傳入的主題,預設為TRUE
3.3 微調影象對比度
ggthemr中十分貼心地提供了調節影象對比度的函式,具體如下:
darken_swatch()
/ lighten_swatch()
: 暗化或亮化所有圖形元素的對比度
darken_gradient()
/ lighten_gradient()
: 暗化或亮化所有梯度元素的對比度
darken_palette()
/ lighten_palette()
: 暗化或亮化所有元素的對比度
下面是簡單的示例:
rm(list=ls()) library(ggplot2) library(ggthemr) data(mpg) data <- mpg ggthemr('chalk') p1 <- ggplot(data=data, aes(displ, hwy))+ geom_point(mapping = aes(shape=factor(cyl)))+ geom_smooth(mapping = aes(displ,hwy,colour=factor(cyl))) print(p1)
下面我們來分別調低和調高全域性色彩對比度:
darken_palette(amount = 0.5) print(p1)
lighten_palette(amount = 0.5) print(p1)
以上就是本文的全部內容,如有筆誤望指出。
參考資料:https://github.com/cttobin/ggthemr