title: “大匠致巧,隨R所圖”
author: “wentao”
date: “2020/12/23”
output: html_document
editor_options: 大匠致巧,隨R所圖 (基礎版)寫在前面早在17年,我就說過要寫一篇設置主題的貼子,讓我們可以更好的使用R語言繪圖系統,當然主要是ggplot主題。從主題到顏色,到形狀都包含在這篇推文中。但是最近的工作,讓我將保存也包含到了這篇推文中,尤其是按照paper進行保存圖片。只是這還沒有達到完整解決圖片使用的問題,高級版本還在制作中。 安裝github R包方式 ##如果沒有這個包,安裝起來還是挺麻煩的 # if (!requireNamespace("devtools", quietly = TRUE)) # install.packages("devtools") # # devtools::install_github("calligross/ggthemeassist") 0 用于演示的例圖#--主題修改--顏色修改 library(ggplot2) head(iris) iris$Species p1 <- ggplot(iris) + geom_point(aes(x = Sepal.Length, y = Petal.Length,fill = Species,color = Species),pch = 21)
p1 1 使用R包中各種主題1.1 ggplot內含主題# 默認灰色主題 p2_1 <- p1+theme_gray() # 默認 # 白色主題 p2_2 <- p1+theme_bw() #--實線網格 p2_3 <- p1+theme_linedraw() # p2_4 <- p1+theme_light() #-黑色背景往往不會使用 p2_5 <- p1+theme_dark() # 無邊框 p2_6 <- p1+theme_minimal() #--origin類似兩邊框 p2_7 <- p1+theme_classic()#這個包簡潔好看 # 無邊框 p2_8 <- p1+theme_void()#橫縱坐標群去掉
library(patchwork)
(p2_1 + p2_2 + p2_3 + p2_4)/( p2_5 + p2_6 + p2_7 + p2_8) 1.2 themes包中的主題library(ggthemes)
p1 + theme_base() # 多添加外邊框 ** p1 + theme_fivethirtyeight() # 類似excel的主題 p1 + theme_solarized()# 類似excel的主題 p1 + theme_gdocs() # 類似excel的主題 p1 + theme_stata() # 類似excel的主題 p1 + theme_few() # 四周邊框,網格去除 *** p1 + theme_wsj() # 類似excel的主題 p1 + theme_economist()# 類似excel的主題 p1 + theme_pander() # 類似excel的主題 p1 + theme_excel() # 類似excel的主題 p1 + theme_tufte() # 去坐標軸 p1 + theme_calc() # 加邊框 p1 + theme_par() # 格子去除,外邊框保留 *** p1 + theme_hc() # 類似excel的主題 1.3 ggthemr 主題 不太適合科研圖表的繪制,所以這里不采用但是其修改全局圖形樣式方式,值得借鑒為科研所使用。 # library(devtools) # devtools::install_github('cttobin/ggthemr')
# library(ggthemr) # ggthemr_reset()#清除現有主題 # ggthemr('dust') # p1 # ggthemr('flat') # p1 # ggthemr('pale') # p1 # ggthemr('fresh') # p1 # ggthemr('flat dark') # p1 # ggthemr('light') # p1 # ggthemr('earth') # p1 # ggthemr('sea') # p1 1.4 ggtech 和 ggsci##接下來我們使用ggtech包來試試#具體學習參照網址:https://github.com/ricardo-bion/ggtech############ # devtools::install_github("ricardo-bion/ggtech", dependencies=TRUE) library(ggtech) p1 + theme_tech(theme="airbnb") +scale_color_tech(theme="airbnb") + scale_fill_tech(theme="airbnb") p1 + theme_tech(theme="etsy") + scale_color_tech(theme="etsy") # 具體學習參照網址:https://github.com/ricardo-bion/ggtech############
######接下來我們使用ggsci包來試試################ library(ggsci) #ggsci打包了Nature Publishing Group,American Association for the Advancement of Science,Lancet journals等期刊的圖片配色 ##使用此包中的配色# p1 +scale_color_nejm() p1 + scale_color_lancet() 全局主題設置: 詳細的全局設置參考ggopt: 1.5 全方位了解主題組成#現在我們一步一步將全部可變修改參數進行一個整理修改:#為了設計主題,我們還需要知道的知識:#linetype的類型有哪些:0 = blank, 1 = solid, 2 = dashed, 3 = dotted, 4 = dotdash, 5 = longdash, 6 = twodash mytheme<-theme(
#########################首先是繪圖區域的整體參數: #先拿網格線開刀,對全部網格線控制 panel.grid.major=element_line(colour = "red"), panel.grid.minor=element_line(colour = "red",linetype = "dashed",size = 0.2), panel.grid.major.x=element_line(colour = "red"), panel.grid.minor.x=element_line(colour = "red"), panel.grid.major.y=element_line(colour = "red"), panel.grid.minor.y=element_line(colour = "red"), #整個圖片背景 plot.background=element_rect(color="blue",fill="grey60"), #其次是繪圖區域的背景:panel.background = element_rect(fill = "blue"), #在這繪圖區域邊框 panel.border = element_rect(colour = "white",fill = NA,size = 2), #########################首先是繪圖區域的整體參數:
#########################設置坐標軸線和刻度線 #axis.line.x = NULL,#移除坐標軸線x #axis.line.y = NULL,#移除坐標軸線y axis.line = element_line(color="black", size = 5), #下面是坐標軸刻度線外觀如果想去掉坐標軸線,axis.ticks=element_blank() #axis.ticks=element_blank(),#移除兩個坐標軸刻度線 axis.ticks.x = element_line(colour = "red",size = 5), axis.ticks.y = element_line(colour = "red",size = 2),#控制刻度標簽而不是坐標軸線 #########################設置坐標軸線和刻度線
#####################對文本進行控制 #首先是標題:plot.title = element_text(family="myFont",colour = "black",size = 20,face = "bold"),# #坐標軸文本只坐標軸標題 axis.title.x =element_text(colour = "red",size = 14), axis.title.y =element_text(colour = "yellow",size = 14), #坐標軸標簽文本 #axis.text.x=element_blank(),# axis.text.x = element_text(colour = "red",size = 14), axis.text.y = element_text(colour = "red",size = 14), #接下來就是圖例部分了 #首先是圖例背景 legend.background = element_rect(fill = "#FF7F00",colour = "red",size=1), #其次是圖例文本 #圖例標題 legend.title = element_text(colour = "blue",face = "bold",size = 14), #圖例項文本 legend.text = element_text(colour = "red"), #圖例符號 legend.key = element_rect(fill = "gray87",colour = "blue",size = 0.25) #####################對文本進行控制 )
##在這些控制部分中我們主題可以控制每一個部分的外觀和有無,但是有些部分是否在這個位置不屬于主題設置的范疇 ##通過控制一下四個參數達到控制圖片外觀的需求,所以了解一下四個參數詳細信息會有很大幫助 1.6 交互式設置主題-用于交互式修改主題但是這里學習一下每個參數的函數也是很好的,只是,我覺得,這些參數學習完成后,還是代碼來的方便,快捷。 # install.packages("ggThemeAssist") library(ggplot2) library(ggThemeAssist)
# 開始調整主題 ggThemeAssistGadget(p1) 1.7 關于全局設定主題# 設置全局主題樣式 theme_set(theme_bw()) 2 顏色設置2.1 RColorBrewer中的配色方案#############顏色庫,調取顏色############### library(RColorBrewer)#調色板調用包 #調用所有這個包中的調色板 display.brewer.all() #提取特定個數的調色板顏色,會出圖顯示 display.brewer.pal(9,"Set1") display.brewer.pal(10,"Dark2") ##僅僅只顯示色號,我們要在顏色上并顯示色號才好 brewer.pal(9,"YlGn") #########這個包就來做這個功能######### library(scales) ###提取主題包中的顏色 m1<-economist_pal()(9)#通過這條命令可以知道economist這個主題只有9種顏色 show_col(m1) m2<-wsj_pal()(6)# show_col(m2)
show_col(wsj_pal()(6)) 2.2 如何修改配色方案R包中的一些顏色直接使用,指定顏色調用 p1 + theme_economist() p1 + theme_economist() + scale_color_economist() p1 + theme_calc() + scale_color_calc()
##########如何使用顏色在圖上##################### #調用調色板調用包顏色 p1+scale_fill_brewer() p1+scale_colour_brewer() #使用灰度調色板 p1+scale_fill_grey() p1+scale_colour_grey() #色輪周圍均勻等距色 p1+scale_fill_hue() p1+scale_colour_hue() p1+scale_colour_discrete() p1+scale_fill_discrete() ####使用自定義 m3=brewer.pal(9,"YlGn") m1<-economist_pal()(9)#通過這條命令可以知道economist這個主題只有9種顏色
show_col(m1) m2<-wsj_pal()(6)# show_col(m2) ######我們提取這些顏色為自己所用 m=c(m2,m1) m p1+scale_fill_manual(values=m) p1+scale_colour_manual(values=m) 2.3 幾種常見顏色2.31離散的幾種顏色#根據需要的顏色將顏色號通過下面命令收集 mi=c("#E41A1C" ,"#377EB8", "#4DAF4A", "#984EA3", "#FF7F00" ,"#FFFF33", "#7c260b", "#1B9E77", "#D95F02" ,"#7570B3" ,"#E7298A", "#66A61E", "#E6AB02", "#8DD3C7", "#FFFFB3", "#BEBADA","#FB8072" ,"#80B1D3", "#FDB462", "#B3DE69", "#FCCDE5","#D9D9D9", "#BC80BD") show_col(mi) #將顏色加上圖上 p+scale_colour_manual(values = mi) library(RColorBrewer)#調色板調用包 #調用所有這個包中的調色板 display.brewer.all() #提取特定個數的調色板顏色,會出圖顯示 display.brewer.pal(9,"Set1") colset1 <- brewer.pal(9,"Set1")[c(5,4)] colset2 <- brewer.pal(12,"Paired") colset3 <- c(brewer.pal(12,"Paired"),brewer.pal(9,"Pastel1")) 2.31 連續顏色如果連續變量,尤其是熱圖等使用顏色-更加豐富的熱圖顏色梯度 scale_fill_gradientn用于設置連續填充。 # Justification controls where the cells are anchored df <- expand.grid(x = 0:5, y = 0:5) df$z <- runif(nrow(df)) # default is compatible with geom_tile() p2 <- ggplot(df, aes(x, y, fill = z)) + geom_raster() + scale_fill_gradientn(colours =colorRampPalette(RColorBrewer::brewer.pal(11,"Spectral"))(60)) + mytheme1 p2 3 多種視覺感官聯用區分顏色和形狀聯合使用p1 <- ggplot(iris) + geom_point(aes(x = Sepal.Length, y = Petal.Length, group = Species, color = Species, shape = Species ) )
p1 有些時候分組下面有子分組,所以用形狀區分大組,用顏色區分小組; 顏色的漸變可以讓我們更加容易觀察一組具有變化的數值,例如在時間尺度上的東西和空間尺度上的東西。 形狀填充顏色不同,讓我們很容易想到一組具有共同特征的東西,或者變量。 iris1 = iris iris1$group = c("A","B","C") head(iris1)
p1 <- ggplot(iris1) + geom_point(aes(x = Sepal.Length, y = Petal.Length, shape = Species, fill = group ) )
p1 + scale_fill_manual(values = c("red","blue","white")) + scale_shape_manual(values = c(21:23)) 4 字體-win字體#使用字體 windowsFonts(myFont = windowsFont("微軟雅黑"))
###這種方式將所有字體調整為新羅馬字體 windowsFonts(myFont = windowsFont("Times New Roman")) p1 +theme_gray(base_size = 20, base_family = "myFont")
#########調整字體大小和漢字字體類型################ p1 + theme_gray(base_size = 20, base_family = "")#可以自己調整字體大小和字體類型 5 常用主題5.1 常用主題1library(RColorBrewer)#調色板調用包 geom.text.size = 15 theme.size = (8/5) * geom.text.size
library(ggthemes) mytheme1 = theme_par() + theme( panel.background=element_blank(), panel.grid=element_blank(), legend.position="right",
legend.title = element_blank(), legend.background=element_blank(), legend.key=element_blank(), # legend.text= element_text(size=7), # text=element_text(), # axis.text.x=element_text(angle=45,vjust=1, hjust=1) plot.title = element_text(size = theme.size,face = "plain",colour = "black",vjust = -8.5,hjust = 0.1), axis.title.y =element_text(size = theme.size,face = "plain",colour = "black"), axis.title.x =element_text(size = theme.size,face = "plain",colour = "black"), axis.text = element_text(size = theme.size,face = "plain"), axis.text.x = element_text(colour = "black",size = theme.size,angle = 45,vjust = 1,hjust = 1), axis.text.y = element_text(colour = "black",size = theme.size), legend.text = element_text(size = theme.size,face = "plain"), strip.text.x = element_text(colour = "black",size = theme.size), strip.text.y = element_text(colour = "black",size = theme.size), strip.background = element_blank(), plot.margin=unit(c(0,0,0,0), "cm")
)
mytheme2 = theme_void() + theme( panel.background=element_blank(), panel.grid=element_blank(), legend.position="right",
legend.title = element_blank(), legend.background=element_blank(), legend.key=element_blank(), # legend.text= element_text(size=7), # text=element_text(), # axis.text.x=element_text(angle=45,vjust=1, hjust=1) plot.title = element_text(size = theme.size,face = "plain",colour = "black",vjust = -8.5,hjust = 0.1), axis.title.y =element_text(size = theme.size,face = "plain",colour = "black"), axis.title.x =element_text(size = theme.size,face = "plain",colour = "black"), axis.text = element_text(size = theme.size,face = "plain"), axis.text.x = element_text(colour = "black",size = theme.size,angle = 45,vjust = 1,hjust = 1), axis.text.y = element_text(colour = "black",size = theme.size), legend.text = element_text(size = theme.size,face = "plain"), strip.text.x = element_text(colour = "black",size = theme.size), strip.text.y = element_text(colour = "black",size = theme.size), strip.background = element_blank() )
# p1 + mytheme1 5.2 常用主題2########這份主題來自劉永鑫老師自己的設計 mytheme2 = theme(panel.background=element_blank(), panel.grid=element_blank(), axis.line.x=element_line(size=.5, colour="black"), axis.line.y=element_line(size=.5, colour="black"), axis.ticks=element_line(color="black"), axis.text=element_text(color="black", size=7), legend.position="right", legend.background=element_blank(), legend.key=element_blank(), legend.text= element_text(size=7), text=element_text(family="sans", size=7)) p1 + mytheme2 5.3 新羅馬字體主題-此時使用win字體windowsFonts(myFont = windowsFont("Times New Roman")) mytheme1 = theme_par(base_family = "myFont") + theme( panel.background=element_blank(), panel.grid=element_blank(), legend.position="right",
legend.title = element_blank(), legend.background=element_blank(), legend.key=element_blank(), # legend.text= element_text(size=7), # text=element_text(), # axis.text.x=element_text(angle=45,vjust=1, hjust=1) plot.title = element_text(vjust = -8.5,hjust = 0.1), axis.title.y =element_text(size = 24,face = "bold",colour = "black"), axis.title.x =element_text(size = 24,face = "bold",colour = "black"), axis.text = element_text(size = 20,face = "bold"), axis.text.x = element_text(colour = "black",size = 14), axis.text.y = element_text(colour = "black",size = 14), legend.text = element_text(size = 15,face = "bold") )
p1 + mytheme1 5.4 不需要坐標軸主題-熱圖等mytheme2 = theme_void() + theme( panel.background=element_blank(), panel.grid=element_blank(), legend.position="right",
legend.title = element_blank(), legend.background=element_blank(), legend.key=element_blank(), # legend.text= element_text(size=7), # text=element_text(), # axis.text.x=element_text(angle=45,vjust=1, hjust=1) plot.title = element_text(vjust = -8.5,hjust = 0.1), axis.title.y =element_text(size = 24,face = "bold",colour = "black"), axis.title.x =element_text(size = 24,face = "bold",colour = "black"), axis.text = element_text(size = 20,face = "bold"), axis.text.x = element_text(colour = "black",size = 14), axis.text.y = element_text(colour = "black",size = 14), legend.text = element_text(size = 15,face = "bold") )
p2 + mytheme2 
根際互作生物學研究室 簡介根際互作生物學研究室是沈其榮教授土壤微生物與有機肥團隊下的一個關注于根際互作的研究小組。本小組由袁軍副教授帶領,主要關注:1.植物和微生物互作在抗病過程中的作用;2 環境微生物大數據整合研究;3 環境代謝組及其與微生物過程研究體系開發和應用。團隊在過去三年中在 isme J, Microbiome, PCE,SBB,Horticulture Research等期刊上發表了多篇文章。歡迎關注 微生信生物 公眾號對本研究小組進行了解。 團隊工作及其成果 (點擊查看)了解 交流 合作團隊成員郵箱 袁軍: junyuan@njau.edu.cn; 文濤: 2018203048@njau.edu.cn 團隊公眾號:
|