一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

R語言學(xué)習(xí) - 箱線圖(小提琴圖、抖動圖、區(qū)域散點(diǎn)圖)

 阿非ycfg 2017-07-30

箱線圖

箱線圖是能同時(shí)反映數(shù)據(jù)統(tǒng)計(jì)量和整體分布,又很漂亮的展示圖。在2014年的Nature Method上有2篇Correspondence論述了使用箱線圖的好處和一個(gè)在線繪制箱線圖的工具。就這樣都可以發(fā)兩篇Nature method,沒天理,但也說明了箱線圖的重要意義。

下面這張圖展示了Bar plot、Box plot、Volin plot和Bean plot對數(shù)據(jù)分布的反應(yīng)。從Bar plot上只能看到數(shù)據(jù)標(biāo)準(zhǔn)差或標(biāo)準(zhǔn)誤不同;Box plot可以看到數(shù)據(jù)分布的集中性不同;Violin plot和Bean plot展示的是數(shù)據(jù)真正的分布,尤其是對Biomodal數(shù)據(jù)的展示。

Boxplot從下到上展示的是最小值,第一四分位數(shù) (箱子的下邊線)、中位數(shù) (箱子中間的線)、第三四分位數(shù) (箱子上邊線)、最大值,具體解讀參見劉永鑫的擴(kuò)增子圖表解讀1箱線圖:Alpha多樣性,老板再也不操心的我文獻(xiàn)閱讀了。

http://www./nmeth/journal/v11/n2/full/nmeth.2811.html

一步步解析箱線圖繪制

假設(shè)有這么一個(gè)基因表達(dá)矩陣,第一列為基因名字,后面幾列為樣品名字,想繪制下樣品中基因表達(dá)的整體分布。

profile='Name;2cell_1;2cell_2;2cell_3;4cell_1;4cell_2;4cell_3;zygote_1;zygote_2;zygote_3
A;4;6;7;3.2;5.2;5.6;2;4;3
B;6;8;9;5.2;7.2;7.6;4;6;5
C;8;10;11;7.2;9.2;9.6;6;8;7
D;10;12;13;9.2;11.2;11.6;8;10;9
E;12;14;15;11.2;13.2;13.6;10;12;11
F;14;16;17;13.2;15.2;15.6;12;14;13
G;15;17;18;14.2;16.2;16.6;13;15;14
H;16;18;19;15.2;17.2;17.6;14;16;15
I;17;19;20;16.2;18.2;18.6;15;17;16
J;18;20;21;17.2;19.2;19.6;16;18;17
L;19;21;22;18.2;20.2;20.6;17;19;18
M;20;22;23;19.2;21.2;21.6;18;20;19
N;21;23;24;20.2;22.2;22.6;19;21;20
O;22;24;25;21.2;23.2;23.6;20;22;21'

讀入數(shù)據(jù)并轉(zhuǎn)換為ggplot2需要的長數(shù)據(jù)表格式 (經(jīng)過前面幾篇的練習(xí),這應(yīng)該都很熟了)

profile_text <- read.table(text="profile," header="">T, row.names=1, quote='',sep=';', check.names=F)
# 在melt時(shí)保留位置信息
# melt格式是ggplot2畫圖最喜歡的格式
# 好好體會下這個(gè)格式,雖然多占用了不少空間,但是確實(shí)很方便

library(ggplot2)
library(reshape2)
data_m <->
head(data_m)
 variable value1  2cell_1     42  2cell_1     63  2cell_1     84  2cell_1    105  2cell_1    126  2cell_1    14

像往常一樣,就可以直接畫圖了。

# variable和value為矩陣melt后的兩列的名字,內(nèi)部變量, variable代表了點(diǎn)線的屬性,value代表對應(yīng)的值。
p <- ggplot(data_m,="" aes(x="variable," y="value),color=variable)" +="">
geom_boxplot() +
theme(axis.text.x=element_text(angle=50,hjust=0.5, vjust=0.5)) +
theme(legend.position='none')
p
# 圖會存儲在當(dāng)前目錄的Rplots.pdf文件中,如果用Rstudio,可以不運(yùn)行dev.off()
dev.off()

箱線圖出來了,看上去還可以,再加點(diǎn)色彩。

# variable和value為矩陣melt后的兩列的名字,內(nèi)部變量, variable代表了點(diǎn)線的屬性,value代表對應(yīng)的值。
p <- ggplot(data_m,="" aes(x="variable," y="value),color=variable)" +="">
geom_boxplot(aes(fill=factor(variable))) +
theme(axis.text.x=element_text(angle=50,hjust=0.5, vjust=0.5)) +
theme(legend.position='none')
p
# 圖會存儲在當(dāng)前目錄的Rplots.pdf文件中,如果用Rstudio,可以不運(yùn)行dev.off()
dev.off()

再看看Violin plot

# variable和value為矩陣melt后的兩列的名字,內(nèi)部變量, variable代表了點(diǎn)線的屬性,value代表對應(yīng)的值。
p <- ggplot(data_m,="" aes(x="variable," y="value),color=variable)" +="">
geom_violin(aes(fill=factor(variable))) +
theme(axis.text.x=element_text(angle=50,hjust=0.5, vjust=0.5)) +
theme(legend.position='none')
p
# 圖會存儲在當(dāng)前目錄的Rplots.pdf文件中,如果用Rstudio,可以不運(yùn)行dev.off()
dev.off()

還有Jitter plot (這里使用的是ggbeeswarm包)

library(ggbeeswarm)
# 為了更好的效果,只保留其中一個(gè)樣品的數(shù)據(jù)
# grepl類似于Linux的grep命令,獲取特定模式的字符串

data_m2 <->'_3', data_m$variable),]

# variable和value為矩陣melt后的兩列的名字,內(nèi)部變量, variable代表了點(diǎn)線的屬性,value代表對應(yīng)的值。
p <- ggplot(data_m2,="" aes(x="variable," y="value),color=variable)" +="">
geom_quasirandom(aes(colour=factor(variable))) +
theme_bw() + theme(panel.grid.major = element_blank(),
panel.grid.minor = element_blank(), legend.key=element_blank()) +
theme(legend.position='none')
# 也可以用geom_jitter(aes(colour=factor(variable)))代替geom_quasirandom(aes(colour=factor(variable)))
# 但個(gè)人認(rèn)為geom_quasirandom給出的結(jié)果更有特色

ggsave(p, filename='jitterplot.pdf', width=14, height=8, units=c('cm'))

繪制單個(gè)基因 (A)的箱線圖

為了更好的展示效果,下面的矩陣增加了樣品數(shù)量和樣品的分組信息。

profile='Name;2cell_1;2cell_2;2cell_3;2cell_4;2cell_5;2cell_6;4cell_1;4cell_2;4cell_3;4cell_4;4cell_5;4cell_6;zygote_1;zygote_2;zygote_3;zygote_4;zygote_5;zygote_6
A;4;6;7;5;8;6;3.2;5.2;5.6;3.6;7.6;4.8;2;4;3;2;4;2.5
B;6;8;9;7;10;8;5.2;7.2;7.6;5.6;9.6;6.8;4;6;5;4;6;4.5'


profile_text <- read.table(text="profile," header="">T, row.names=1, quote='',sep=';', check.names=F)

data_m = data.frame(t(profile_text['A',]))
data_m$sample = rownames(data_m)
# 只挑選顯示部分
# grepl前面已經(jīng)講過用于匹配
data_m[grepl('_[123]', data_m$sample),]
          A   sample2cell_1  4.0  2cell_12cell_2  6.0  2cell_22cell_3  7.0  2cell_34cell_1  3.2  4cell_14cell_2  5.2  4cell_24cell_3  5.6  4cell_3zygote_1 2.0 zygote_1zygote_2 4.0 zygote_2zygote_3 3.0 zygote_3

獲得樣品分組信息 (這個(gè)例子比較特殊,樣品的分組信息就是樣品名字下劃線前面的部分)

# 可以利用strsplit分割,取出其前面的字符串
# R中復(fù)雜的輸出結(jié)果多數(shù)以列表的形式體現(xiàn),在之前的矩陣操作教程中
# 提到過用str函數(shù)來查看復(fù)雜結(jié)果的結(jié)構(gòu),并從中獲取信息
group = unlist(lapply(strsplit(data_m$sample,'_'), function(x) x[1]))
data_m$group = group
data_m[grepl('_[123]', data_m$sample),]
          A   sample  group2cell_1  4.0  2cell_1  2cell2cell_2  6.0  2cell_2  2cell2cell_3  7.0  2cell_3  2cell4cell_1  3.2  4cell_1  4cell4cell_2  5.2  4cell_2  4cell4cell_3  5.6  4cell_3  4cellzygote_1 2.0 zygote_1 zygotezygote_2 4.0 zygote_2 zygotezygote_3 3.0 zygote_3 zygote

如果沒有這個(gè)規(guī)律,也可以提到類似于下面的文件,指定樣品所屬的組的信息。

sampleGroup_text='Sample;Group
zygote_1;zygote
zygote_2;zygote
zygote_3;zygote
zygote_4;zygote
zygote_5;zygote
zygote_6;zygote
2cell_1;2cell
2cell_2;2cell
2cell_3;2cell
2cell_4;2cell
2cell_5;2cell
2cell_6;2cell
4cell_1;4cell
4cell_2;4cell
4cell_3;4cell
4cell_4;4cell
4cell_5;4cell
4cell_6;4cell'


#sampleGroup = read.table(text=sampleGroup_text,sep='\t',header=1,check.names=F,row.names=1)

#data_m <- merge(data_m,="" samplegroup,="" by='row.names'>

# 會獲得相同的結(jié)果,腳本注釋掉了以免重復(fù)執(zhí)行引起問題。

矩陣準(zhǔn)備好了,開始畫圖了 (小提琴圖做例子,其它類似)

# 調(diào)整下樣品出現(xiàn)的順序
data_m$group <- factor(data_m$group,="" levels="">'zygote','2cell','4cell'))
# group和A為矩陣中兩列的名字,group代表了值的屬性,A代表基因A對應(yīng)的表達(dá)值。
# 注意看修改了的地方
p <- ggplot(data_m,="" aes(x="group," y="A),color=group)" +="">
geom_violin(aes(fill=factor(group))) +
theme(axis.text.x=element_text(angle=50,hjust=0.5, vjust=0.5)) +
theme(legend.position='none')
p
# 圖會存儲在當(dāng)前目錄的Rplots.pdf文件中,如果用Rstudio,可以不運(yùn)行dev.off()

長矩陣?yán)L制箱線圖

常規(guī)矩陣?yán)L制箱線圖要求必須是個(gè)方正的矩陣輸入,而有時(shí)想比較的幾個(gè)組里面檢測的值數(shù)目不同。比如有三個(gè)組,GrpA組檢測了6個(gè)病人,GrpB組檢測了10個(gè)病人,GrpC組是12個(gè)正常人的檢測數(shù)據(jù)。這時(shí)就很難形成一個(gè)行位檢測值,列為樣品的矩陣,長表格模式就適合與這種情況。

long_table <->'Grp;Value
GrpA;10
GrpA;11
GrpA;12
GrpB;5
GrpB;4
GrpB;3
GrpB;2
GrpC;2
GrpC;3'


long_table <- read.table(text="">'\t',header=1,check.names=F)

p <- ggplot(data_m,="" aes(x="Grp," y="Value),color=Grp)" +="">
geom_violin(aes(fill=factor(Grp))) +
theme(axis.text.x=element_text(angle=50,hjust=0.5, vjust=0.5)) +
theme(legend.position='none')
p
dev.off()

長表格形式自身就是常規(guī)矩陣melt后的格式,這種用來繪制箱線圖就很簡單了,就不做解釋了。

R繪圖學(xué)習(xí)

R語言學(xué)習(xí)  -  入門環(huán)境Rstudio

R語言學(xué)習(xí)  - 熱圖繪制  (heatmap)

R語言學(xué)習(xí)  -  基礎(chǔ)概念和矩陣操作

R語言學(xué)習(xí)  -  熱圖美化

R語言學(xué)習(xí) - 熱圖簡化

R語言學(xué)習(xí) - 線圖繪制

R語言學(xué)習(xí) - 線圖一步法

文章集錦

Linux學(xué)習(xí)  R統(tǒng)計(jì)繪圖  Python教程  Perl學(xué)習(xí)

生信傻瓜  NGS持續(xù)更新中 (鏈接失效,點(diǎn)擊菜單知識庫查看)

學(xué)習(xí)生信,長按關(guān)注

 

學(xué)習(xí)宏基因組,長按關(guān)注


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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    少妇人妻精品一区二区三区| 日韩特级黄片免费观看| 婷婷亚洲综合五月天麻豆| 久久精品国产在热亚洲| 亚洲欧美日本视频一区二区| 91人妻人人揉人人澡人| 日本婷婷色大香蕉视频在线观看| 日韩欧美一区二区不卡视频| 隔壁的日本人妻中文字幕版 | 加勒比日本欧美在线观看| 人妻露脸一区二区三区| 国产性色精品福利在线观看| 在线观看免费视频你懂的| 午夜国产精品福利在线观看 | 青青久久亚洲婷婷中文网| 人妻偷人精品一区二区三区不卡 | 日韩女优精品一区二区三区| 人妻久久这里只有精品| 91亚洲国产成人久久| 国产午夜精品福利免费不| 激情视频在线视频在线视频| 久久精品少妇内射毛片| 男女午夜福利院在线观看| 少妇熟女亚洲色图av天堂| 欧美日韩视频中文字幕| 日韩成人高清免费在线| 午夜福利直播在线视频| 国产精品一区二区视频| 日韩国产亚洲一区二区三区| 国产精品亚洲二区三区| 成人午夜免费观看视频| 日韩精品一级片免费看| 国产内射一级一片内射高清| 欧美日韩国产一级91| 中文字幕人妻av不卡| 国产成人精品视频一二区| 精品高清美女精品国产区| 日韩1区二区三区麻豆| 欧美久久一区二区精品| 人妻精品一区二区三区视频免精| 香蕉尹人视频在线精品|