ggpolt2有兩個(gè)函數(shù)可以繪制柱形圖,一個(gè)是昨天介紹的geom_bar(stat_count)聋袋,另一個(gè)是geom_col
geom_bar是對(duì)每一組中的樣本個(gè)數(shù)進(jìn)行計(jì)數(shù)后畫圖,柱子的高度代表組內(nèi)樣本的個(gè)數(shù)。然而在設(shè)定stat="identity" 這個(gè)參數(shù)后低散,該函數(shù)就不會(huì)對(duì)樣本進(jìn)行計(jì)數(shù),此時(shí)骡楼,柱子的高度就是你數(shù)據(jù)內(nèi)相應(yīng)的數(shù)值熔号。
本文要介紹的是geom_col, 該函數(shù)是對(duì)每個(gè)組內(nèi)不同類型的事件計(jì)數(shù)后,計(jì)算構(gòu)成比進(jìn)行繪圖鸟整,每個(gè)柱子的高度代表每個(gè)組內(nèi)事件的總數(shù)引镊,柱子內(nèi)部還會(huì)被劃分成不同比例,代表不同事件的構(gòu)成比吃嘿。
本文用到的數(shù)據(jù):
簡(jiǎn)單介紹一下祠乃,圖1是SNP數(shù)據(jù),有12個(gè)樣本兑燥,每個(gè)樣本內(nèi)部還有A-G, C-T, A-C, A-T, C-G, G-T等事件,數(shù)字代表SNP位點(diǎn)個(gè)數(shù)琴拧,即事件發(fā)生數(shù)降瞳,geom_col就是用于表示每個(gè)樣本內(nèi)的事件發(fā)生數(shù)的構(gòu)成比,每個(gè)柱子內(nèi)都會(huì)按照構(gòu)成比被分成若干塊蚓胸。圖2表示每種SNP類型所屬的大類挣饥,是Transition(轉(zhuǎn)換)還是Transversion(顛換),圖2不是畫圖所必需的沛膳,但可以在圖上表示出來(lái)扔枫,增加圖片包含的信息量。
理解數(shù)據(jù)后锹安,開始讀入數(shù)據(jù):
snp <- read.csv(file = "clipboard",header = T,sep = "\t")? ? #讀入數(shù)據(jù)(圖1)
type <- read.csv(file = "clipboard",header = T,sep = "\t")? #讀入數(shù)據(jù)(圖2)
snp <- melt(snp,id = c("SNP_type"))? #寬數(shù)據(jù)變成長(zhǎng)數(shù)據(jù)
>head(snp)
>snp <- merge(snp,type,by = "SNP_type")? #按照SNP_type合并兩個(gè)數(shù)據(jù)
>head(snp)
數(shù)據(jù)準(zhǔn)備好后短荐,開始畫圖:
snp$SNP_type <- factor(snp$SNP_type,levels = c("A-G","C-T","A-C","A-T","C-G","G-T"))? ? ? ?#按照這個(gè)順序?qū)γ總€(gè)柱子內(nèi)部的小方塊進(jìn)行排序(從上到下)
ggplot(snp)+
? geom_col(mapping = aes(variable,value,fill = SNP_type,color = Type),width = 0.9,size = 1.2)+ #可以設(shè)置position = "fill" 參數(shù)倚舀,讓每個(gè)柱子等高,這樣方便比較每個(gè)樣本的構(gòu)成比忍宋。
? coord_cartesian(expand = F,xlim = c(0.45,12.65))+
? scale_color_manual(values = c("black","grey"))+
? labs(x = "Group",y = "",fill = "SNP type",color = "Type")+
? theme(panel.background = element_blank(),
? ? ? ? panel.grid.major.y = element_line(colour = "grey",linetype = 2),
? ? ? ? axis.line = element_line(colour = "black",size = rel(2)),
? ? ? ? axis.title = element_text(size = rel(1.2)),
? ? ? ? axis.text.x = element_text(size = rel(1.5),angle = 45,hjust = 1),
? ? ? ? axis.text.y = element_text(hjust = 1,size = rel(1.5)),
? ? ? ? axis.ticks = element_line(size = rel(1.5)),
? ? ? ? legend.key.size =? unit(12,"mm"),? ? ? ?#圖例中圖形的尺寸
? ? ? ? legend.title = element_text(size = rel(1.2)),
? ? ? ? legend.text = element_text(size = rel(1.2)),
? ? ? ? legend.spacing.y = unit(5,"mm"),? ? ?#圖例的標(biāo)題和圖例的圖形之間的間隔
? ? ? ? plot.margin = margin(22,10,5,1))