日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

R 語言的高顏值的配圖法則 | 論文寫作

 生物_醫(yī)藥_科研 2018-12-18

筆者前一段時(shí)間忙于為新文章制作配圖,多處搜集配圖優(yōu)雅美觀的優(yōu)質(zhì)論文。最后終于找到一篇發(fā)表在 Science Advances 的文章——通過高通量測(cè)序分析揭示了小 RNA 在小鼠卵母細(xì)胞和早期胚胎中的調(diào)控作用。



文章中除了復(fù)雜的 RNA Seq、Chip Seq 分析,圖表的搭配十分美觀。雖說我們是崇高的科(ke)學(xué) (yan) 家 (gou),但關(guān)乎我們畢業(yè)大計(jì)的 SCI 也得要「高顏值」。


以常見的熱圖(heatmap)為例,在分子生物學(xué)涉及高通量以及芯片的文章中,尤其是 RNA-seq 相關(guān)論文里,熱圖是文章里經(jīng)常出現(xiàn)的數(shù)據(jù)可視化形式。


一張美觀的熱圖不僅可以直觀呈現(xiàn)多樣本、多個(gè)基因的全局表達(dá)量變化,以及多樣本或多基因表達(dá)量的聚類關(guān)系,更是如下圖般令人賞心悅目。



繪制熱圖有多種方法,常見的大家有用 MeV,各種網(wǎng)頁工具,甚至有用 Excel 再上手 PS 的??墒切』锇閭儯?1 世紀(jì)連小學(xué)生都會(huì)編程了,你咋還在用軟件做熱圖?


且不說用 Excel 出來的熱圖截圖清晰度能不能達(dá)到發(fā)文章的標(biāo)準(zhǔn),先來看看它的美觀度,筆者在這里隨機(jī)打開一個(gè)數(shù)據(jù)集,利用色階給大家用 Excel 做一下熱圖,效果如下:



What?這完全沒有辦法聚類好么,我還怎么看差異變化?把這樣的熱圖給老板,別說文章涼了,能不能走出老板辦公室都是問題。


圖片來源:影視截圖


現(xiàn)在的高分論文一個(gè)個(gè)華麗麗的配圖,動(dòng)輒 R 語言、Python…聽起來就高級(jí),筆者當(dāng)年憑著中學(xué)的記憶笨笨地操作 Excel,真是苦不堪言!


老板說了,要是再做不出來滿意的圖,就滾去刷一個(gè)月錐形瓶。


于是就有小伙伴問了,沒時(shí)間系統(tǒng)地學(xué)習(xí)編程,那種「套代碼公式就能搞定 R 語言繪圖,懂中文就能會(huì)的教程」,能不能給我來一份???


答案是肯定的了,下面就跟隨筆者,從作圖小白一步步做個(gè)初級(jí)大觸吧~



1 基本圖繪制


吶~筆者整理出一份基礎(chǔ)教程,為了照顧零基礎(chǔ)的電腦盲同學(xué),我們從安裝 R 語言開始介紹。給大家兩個(gè)網(wǎng)址,里面詳細(xì)介紹了 R 語言 [2] 和 RStudio [3] 的安裝。


安裝好后我們打開 RStudio:

> setwd('D:/workdir/')  #設(shè)置工作目錄

>install.packages(“ggplot2”)  #安裝 pheatmap 程序包

> library(ggplot2)  #加載 ggplot2 程序包

> data <- read.csv('text.csv',header="T,row.names" ==""> #讀取數(shù)據(jù),讀取 csv 格式數(shù)據(jù),header = T 代表首行為表頭,row.names = 1 代表首列為行名。


筆者找來一個(gè)數(shù)據(jù)集如下:



進(jìn)行完準(zhǔn)備工作后,我們開始學(xué)習(xí),基本圖的制作:


(1)散點(diǎn)圖

> p <- ggplot(data,aes(x="data$TypeA,y=data$TypeB))" +=""> # data 代表數(shù)據(jù)名,aes(x=data$TypeA,y=data$TypeB) 代表橫坐標(biāo)與縱坐標(biāo),geom_point() 可以表示繪制散點(diǎn)

> p #展示結(jié)果圖



(2)折線圖

> p <- ggplot(data,aes(x="data$TypeA,y=data$TypeB))" +="" geom_line()="" +="" geom_point()=""> # geom_line() 代表繪制折線,geom_point() 存在與否可以表示點(diǎn)的標(biāo)注。

> p



(3)條形圖 (為了更直觀,筆者截取了部分?jǐn)?shù)據(jù)

> p <- ggplot(data,aes(x="data$gene_id,y=data$TypeB))" +="" geom_bar(stat='identity'> # geom_bar() 代表繪制直方圖。

> p



(4)箱線圖

> p <- ggplot(data3,aes(x="data3$Type,y=data3$data))" +="" geom_boxplot()=""># geom_boxplot() 代表繪制箱線圖。

> p



(5)小提琴圖

> p <- ggplot(data3,aes(x="data3$Type,y=data3$data))" +="" geom_violin()=""># geom_violin() 代表繪制小提琴圖。

> p



至此,筆者給大家?guī)砦宸N基本圖的繪制,還是簡(jiǎn)單的吧~



2 基本圖修飾


通過上面的學(xué)習(xí),我們大致了解基本圖的繪制,所有的修飾都建立這些圖形之上,這部分給大家說說如何讓基本圖更「高大上」,通過基本圖的修飾,我們就能完成大部分的配圖模仿了。


(1)配色

對(duì)于筆者這樣直男審美的大漢來說,有一個(gè)華麗麗的配色包可謂是莫大的福利,那么 R 語言中是否有一個(gè)這樣的配色包呢?


有的,那就是 RColorBrewer。


按照前文的方式我們配置好工作目錄,加載好數(shù)據(jù)以及 ggplot2、RColorBrewer 程序包。


> display.brewer.all() #用這個(gè)命令可以生成一張圖查看本程序的調(diào)色板,如下圖所示:



> p <- ggplot(data1,aes(x="data1$number1,y=data1$stage2,color=data1$stage,shape=data1$value))" +scale_color_brewer(palette='Blues' )=""># color=data1$stage 將顏色屬性傳遞給 stage 這一列,shape=data1$value 將形狀屬性傳遞給 value 這一列,scale_color_brewer(palette = 'Blues') 使用上圖中 Blues 調(diào)色板。

> p



(2)坐標(biāo)軸

坐標(biāo)軸文本修飾可以更加清晰的按照作者的意愿表達(dá),文章中的配圖坐標(biāo)軸都有明顯的修飾痕跡:



坐標(biāo)軸修飾也是通過一些基本完成命令,以修改上圖為例:

> p + coord_flip() #交換 x 軸和 y 軸

> p + ylim(0,15) #如果想截取某一段可以用此命令設(shè)置值域。



> p  + scale_x_continuous(breaks =seq(18,34,50) ) #設(shè)置刻度線位置



> p + theme(axis.text.x = element_text(angle = 90,family = 'Times',face = 'italic',colour = 'darkred',size=rel(0.9))) # angle = 90 設(shè)置字體角度, family = 'Times' 設(shè)置字體族, face = 'italic' 設(shè)置樣式, colour = 'darkred' 設(shè)置顏色, size=rel(0.9) 設(shè)置大小



> p + xlab('Number of data') #修改坐標(biāo)文本



(3)誤差線修飾

文章中使用了大量的誤差線條形圖:



誤差線是大家經(jīng)常需要的通常用于顯示潛在的誤差或相對(duì)于系列中每個(gè)數(shù)據(jù)標(biāo)志的不確定程度。誤差線可以用標(biāo)準(zhǔn)差 (平均偏差) 或標(biāo)準(zhǔn)誤差, 用以下這個(gè)命令可以為圖表添加誤差線:


p <- ggplot(data1,aes(x="data1$gene,y=data1$FPKM,fill=data1$stage))">

+ geom_bar(position = 'dodge', stat = 'identity') #設(shè)置條形圖 [position = 'dodge'] 代表?xiàng)l形圖成簇狀分布

+ geom_errorbar(aes(ymin=data1$FPKM-data1$Standard.Deviation, ymax=data1$FPKM+data1$Standard.Deviation), width=.5,position=position_dodge(.9))  #增加誤差線,誤差線高度為 FPKM ±Standard.Deviation 兩列數(shù)據(jù)都是提前計(jì)算好的。



(4)基本屬性擴(kuò)展

主題更改:我們利用基礎(chǔ)圖形命令得到下圖:

> p <- ggplot(heightweight,aes(x="ageYear,y=heightIn,colour=sex))" +="">



下面對(duì)外觀進(jìn)行修整:


①繪圖區(qū)域選項(xiàng)

> p + theme(panel.grid.major = element_line('red'),panel.grid.minor = element_line(colour = 'red',linetype='dashed',size=0.2),panel.background = element_rect(fill='lightblue'),panel.border = element_rect(colour = 'blue',fill=NA,size=2)) # panel.grid.minor = element_line(colour = 'red',linetype='dashed',size=0.2) 割線顏色,type,尺寸;panel.background = element_rect(fill='lightblue') 背景顏色,panel.border = element_rect(colour = 'blue',fill=NA,size=2)) 外框顏色,尺寸。


②文本項(xiàng)目選項(xiàng)

> p + ggtitle('Plot title here') + theme(axis.title.x = element_text(colour='red',size=14),axis.text.x = element_text(colour='blue'),axis.title.y = element_text(colour ='red',size=14,angle=90),axis.text.y=element_text(colour='blue'),plot.title=element_text(colour='red',size=20,face='bold')) # ggtitle('Plot title here') 標(biāo)題選項(xiàng);theme 主題選項(xiàng),其余為文字選項(xiàng)。


③圖例選項(xiàng)

> p + theme(legend.background = element_rect(fill='grey85',colour = 'red',size=1),legend.title = element_text(colour = 'blue',face='bold',size = 14),legend.text = element_text(colour = 'red'),legend.key = element_rect(colour = 'blue',size = 0.25))


④分面選項(xiàng)

> p + facet_grid(sex ~ .) + theme(strip.background = element_rect(fill='pink'),strip.text.y = element_text(size = 14,angle = -90,face = 'bold'))


實(shí)操結(jié)果如下:




到此為止我們已經(jīng)可以處理較為復(fù)雜的代碼了,不信你試試模仿下文章中那個(gè)高級(jí)條形圖?



本次的學(xué)習(xí)大家也可以運(yùn)用 R 語言繪制這樣的圖形,一個(gè)超長的函數(shù)也可以簡(jiǎn)單的拆分成幾個(gè)小命令:


>  p <- ggplot(data1,aes(x="data1$value,y=data1$number1,fill=data1$stage))">#寫入數(shù)據(jù)

+geom_bar(stat = 'identity',width = 0.6,alpha=.9)  #柱狀圖基本設(shè)置

+ guides(fill=guide_legend(reverse = T))  #圖例設(shè)置

+coord_flip() #反轉(zhuǎn)坐標(biāo)

+ theme_bw() + theme(panel.grid.major = element_blank(),panel.grid.minor = element_blank()) + geom_hline(aes(yintercept = 0), data1,alpha=0.2) #設(shè)置主題

+ labs(fill='Fold change') +ylab('Picture of text') #坐標(biāo)標(biāo)題

+scale_x_discrete(breaks = c('A','B','C','D','E','F'),labels = c('D0','D1,'D2,'D3,'D4,'D5)) #更換刻度文本

+ expand_limits(y=-300) #擴(kuò)大值域

+ scale_y_continuous(breaks = c(-300,-200,-100,0,100,200,300)) #增加刻度線

+scale_fill_manual (values =c('p'='#3399CC','k'='#996666','4'='#802326','3'='#c2595e','2'='#e49eaf','1.5'='#FFCCCC','-4'='#29568a','-3'='#367fc2','-2'='#79c3ec','-1.5'='#99CCFF')) #更改配色方案



到此為止相信大家可以輕松運(yùn)用 R 語言繪制基本圖以及進(jìn)行常規(guī)修飾了,終于可以和那些野雞繪圖方式說拜拜了。


圖片來源:影視截圖


什么?覺得還是不夠用?經(jīng)過兩個(gè)階段的艱苦奮戰(zhàn),大家的繪圖之路已經(jīng)爬完大半程,接下來小編將給大家?guī)?R 語言的高級(jí)繪圖。那我們廢話少說,繼續(xù)滿滿的干貨之路。



3 高級(jí)圖繪制


(1)基因熱圖

文章中運(yùn)用了大量的熱圖,熱圖在高通量分析文章中是必不可少的:



關(guān)于基因熱圖還真是讓人又愛又恨,這部分將使用專門的熱圖繪制工具給大家講解:


第一步:我們要安裝并加載繪制熱圖的程序包

>install.packages(“pheatmap”)  #安裝 pheatmap 程序包

>library(pheatmap)  #加載 pheatmap 程序包


第二步:設(shè)置工作目錄,也就是要分析的文件所在的位置

>setwd('D:/')  #我把文件放在 D 盤,大家根據(jù)自己的情況設(shè)置


第三步:讀取文件

> heatmap.pic1 <- read.csv('text.csv',header="T,row.names" =="" 1)="">#文件一般需要 csv 格式,其中 header = T 代表首行為表頭,row.names = 1 代表第一列是名字,不做讀取。


舉個(gè)例子,我的數(shù)據(jù)是這樣的:



第四步:繪制熱圖


pheatmap(heatmap.pic1,  #載入我們的數(shù)據(jù)

scale='column',  #進(jìn)行均一化處理, 可以是 'row','column' 以及 'none',如果不標(biāo)志這條命令默認(rèn)是 'none'

clustering_distance_rows = 'correlation',  #優(yōu)化聚類線長度

treeheight_row=25,  #按行聚類樹高

treeheight_col=25,  #按列聚類樹高

cluster_cols=F,  #是否按列聚類

cluster_rows=T,  #是否按行聚類

display_numbers=F,  #是否在每一格上顯示數(shù)據(jù)

number_format='%.2f',  #顯示數(shù)據(jù)的格式,幾位小數(shù)

fontsize_row=10,  #行名稱字體大小

fontsize_col=15,  #列名稱字體大小

main='heatmap',  #標(biāo)題名稱

gaps_row = c(10, 15),  #插入縫隙,不能聚類!

cutree_row = 3,  #按聚類分割

show_colnames=TRUE,  #是否顯示列名

show_rownames=TRUE,  #是否顯示行名

color = colorRampPalette(c('green','black','red'),bias=1)(256),   #定義顏色, 其中 “bias=1” 表示中間基準(zhǔn)顏色在正中間,換成其他數(shù)字可以上下調(diào),可以自己修改試試體會(huì)下?!?256)” 代表有 256 個(gè)顏色過渡,這個(gè)數(shù)字越大的話,顏色越平滑,也可以自己調(diào)節(jié)下

cellwidth = 50,  #格子長度

cellheight= 14,  #格子高度

border_color = 'black',  #格子框顏色

legend = FALSE,  #是否顯示圖例

legend_breaks = -5:5,  #圖例范圍

filename = 'heatmap.pic1.pdf',  #保存文件命名)


好啦,基本常用的功能已經(jīng)總結(jié)給大家了,需要大家注意的是需要?jiǎng)h掉后面的標(biāo)注,選擇自己需要的功能。以下兩圖為例:



>pheatmap(heatmap.pic1,show_rownames=T,show_colnames=T,treeheight_row=20,treeheight_col=20,scale='row',cellwidth = 10,cellheight=10,cutree_row = 4)  #顯示行名列名,設(shè)置樹高,,行歸一化,格子長寬為 10,按聚類分為四類,其他方面默認(rèn)處理。得到如左圖效果圖。


>pheatmap((heatmap.pic1,treeheight_row=20,,cluster_cols=FALSE,show_rownames=F,color = colorRampPalette(c('green','black','red'),bias=1)(256),scale='row')  #行樹高 20,列不聚類,不顯示行名,三種顏色漸變,行歸一化。得到如右圖效果圖。


(2)火山圖

火山圖經(jīng)常用于展示差異表達(dá)的基因,常用于芯片、測(cè)序等組學(xué)檢測(cè)技術(shù)的結(jié)果中,與熱圖可是一對(duì)好兄弟:


data =read.table('text.csv',header=T,row.names=1) #讀取文件

p = ggplot(data,aes(log2FC,-1*log10(symble))) + geom_point() #通過對(duì)樣品取對(duì)數(shù)歸一化處理樣品,然后繪制火山圖。


p + geom_point(aes(color =significant)) #增加點(diǎn)的顏色

p+geom_hline(yintercept=1.3)+geom_vline(xintercept=c(-1,1))

p+geom_hline(yintercept=1.3,linetype=4)+geom_vline(xintercept=c(-1,1),linetype=4) #增加閾值線,最終得到下圖。



好的,本次的「套路」給大家講完了,你是否學(xué)會(huì)應(yīng)用在你的文章里了呢~


參考資料: 

[1]R Graphics Cookbook by Winston Chang(O’Reolly).Copyright2013WinstonChang,978-1-449-361695-2.

[2]https://jingyan.baidu.com/article/647f0115d11aab7f2048a875.html

[3]https://jingyan.baidu.com/article/7f766daf87fedf4100e1d076.html

[4]Yang Q, Lin J, Miao L, et al. Highly sensitive sequencing reveals dynamic modifications and activities of small RNAs in mouse oocytes and early embryos[J]. Science Advances, 2016, 2(6):e1501482.

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多