一、簡介
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