之前有和群裡的小夥伴討論說"將之前Python-matplotlib 繪製的圖用R-ggplot2重新繪製",也得到很多小夥伴的響應。本期推文就推出箱線圖(boxplot)的R-ggplot2 繪製方法,大家可以和 Python-matplotlib 箱線圖繪製 這篇文章對比下。
(1)數據預覽
由於數據和之前的數據一樣,且ggplot2 對繪圖數據也是有一定要求,現給出數據如下(部分):
其中Type 中主要含有 Teain sample 和 Test sample 兩種。
(2)數據可視化
R-ggplot2 繪製箱線圖很簡單,主要為 geom_boxplot() ,先採用默認的參數繪製 ,代碼如下:
plot_pir <- ggplot(data = box_data,aes(x = Type,y = AOD_550nm))+ geom_boxplot(aes(fill=Type))+ labs(caption = "Visualization by DataCharm")plot_pir結果如下:
當然,你也可以更改 x、y,使其"橫向"展示:
plot_pir2 <- ggplot(data = box_data,aes(x = AOD_550nm,y = Type))+ geom_boxplot(aes(fill=Type))+ labs(caption = "Visualization by DataCharm")plot_pir2結果如下:
雖然默認的格式還不錯,但想要符合學術圖表要求,還是需要們進行定製化修改,如箱線圖的寬、顏色、字體以及一些主題 顏色等,下面我們進行修改。代碼如下:
plot_pir2_ed <- ggplot(data = box_data,aes(x = AOD_550nm,y = Type))+ geom_boxplot(aes(fill=Type),width = 0.4)+ labs(x ='Values',y=NULL, title = "The boxplot of Train data and Tset data", subtitle = "Boxplot R-ggplot2 Exercise", caption = 'Visualization by DataCharm')+ #添加圖序號(a) geom_text(x=2.4,y=2.3,label='(a)',size=8,family='Times_New_Roman',fontface='bold')+ theme(text = element_text(family = 'Times_New_Roman'), axis.text = element_text(family = 'Times_New_Roman',size = 13,face = 'bold'), #去除圖例標題 legend.title = element_blank(), axis.ticks.length=unit(-0.25, "cm"), #設置刻度label的邊距 axis.text.x = element_text(margin=unit(c(0.5,0.5,0.5,0.5), "cm")), axis.text.y = element_text(margin=unit(c(0.5,0.5,0.5,0.5), "cm")) )plot_pir2_ed涉及到的都是簡單的 繪圖函數及繪圖屬性設置。大家可以直接閱讀ggplot2的官網(https://ggplot2.tidyverse.org/reference/theme.html) 進行查看。上述代碼結果如下:
ggplot2 自身帶有多個優秀的 主題風格(theme),下面我們結合主題並設置自定義較利於出版的灰色系顏色,代碼如下:
plot <- ggplot(data = box_data,aes(x = Type,y = AOD_550nm))+ geom_boxplot(aes(fill=Type),width = 0.4) + scale_fill_manual(values = c('grey40','grey80'))+ #設置軸範圍 scale_y_continuous(limits = c(-.1,2.5),expand = c(0,0))+ labs(x =NULL,y=NULL, title = "The boxplot of Train data and Tset data", subtitle = "Boxplot R-ggplot2 Exercise", caption = 'Visualization by DataCharm')+ #添加圖序號(a) geom_text(x=2.4,y=2.3,label='(a)',size=8,family='Times_New_Roman',fontface='bold')+ theme_linedraw()+ theme(text = element_text(family = 'Times_New_Roman'), axis.text = element_text(family = 'Times_New_Roman',size = 13,face = 'bold'), panel.grid.major = element_line(colour = "gray50",linetype = 'dashed',size=.57), panel.grid.minor = element_line(color = "white"), #去除圖例標題 legend.title = element_blank(), #加寬圖邊框 panel.border = element_rect(size=1), #修改刻度線朝裡 axis.ticks.length=unit(-0.25, "cm"), #設置刻度label的邊距 axis.text.x = element_text(margin=unit(c(0.5,0.5,0.5,0.5), "cm")), axis.text.y = element_text(margin=unit(c(0.5,0.5,0.5,0.5), "cm")) )plot知識點:
(1)自定義顏色
scale_fill_manual(values = c('grey40','grey80'))(2)主題選擇:theme_linedraw()
(3)theme()中進行定製化設置
theme(text = element_text(family = 'Times_New_Roman'), axis.text = element_text(family = 'Times_New_Roman',size = 13,face = 'bold'), panel.grid.major = element_line(colour = "gray50",linetype = 'dashed',size=.57), panel.grid.minor = element_line(color = "white"), legend.title = element_blank(), panel.border = element_rect(size=1), axis.ticks.length=unit(-0.25, "cm"), axis.text.x = element_text(margin=unit(c(0.5,0.5,0.5,0.5), "cm")), axis.text.y = element_text(margin=unit(c(0.5,0.5,0.5,0.5), "cm")) )結果如下:
或者如下:
使用 theme_classic() 主題,效果如下:
更多主題設置,大家可以查看官網哦。(以自己經驗來說,還是直接查官網 或者 Google)
R-ggplot2 繪製箱線圖還是十分簡單的,不僅擁有豐富 的圖表元素設置函數、主題以及額外的第三方繪圖包。當然,對繪圖數據的要求也比較嚴格。大家覺得和Python 繪製 有什麼不同呢?歡迎在文末 讀者討論 或 進群進行交流討論啊。
為了大家更好的學習交流,DataCharm的學習交流群已經建立,由於群的二維碼連接易失效,可以通過掃面下方二維碼,添加本人微信,做自我介紹啊,要不然我都不知道是誰。我拉你入群。偷偷告訴你,群裡的大牛是真多哦