【R語言作圖】富集分析結(jié)果直方圖

前言

最近小Q在做自然選擇分析匣吊,分析完之后簡單粗暴的對候選基因做了富集分析,并做了展示蹬碧,比起氣泡圖,我模仿了另一種作圖方式炒刁,顯示效果更佳恩沽。所以想在此分享一下如何用R語言畫富集分析示意圖(非氣泡圖)。

畫圖思路

利用ggplot2+grid包進行畫圖翔始,采用分面的思想作圖罗心。


畫圖代碼

#導入所需R包
library(ggplot2)
library(grid)

#--------------------------------------
# 數(shù)據(jù)讀入與預處理
#--------------------------------------
options(stringsAsFactors = FALSE)
dat<-read.table("exampleData2.txt",header = TRUE,sep = "\t")
#---------------
# 輸入文件格式:Term Inputnumber Backgroundnumber PValue label
# Inputnumber: 你的基因列表和Term基因列表重疊的基因數(shù)目
# label:是你想特別強調(diào)的Trem,1表示特別強調(diào)城瞎,0表示不特別強調(diào)
                              Term Inputnumber Backgroundnumber      PValue label
                  Plasma omega-6           10              689 0.000465508     0
        Verbal declarative memory           9              340 0.000670600     0
              Phospholipid levels           8              170 0.001023562     1
                      Temperament          12              158 0.002094460     0
 Red blood cell fatty acid levels          11               43 0.003176734     1
         Oleic acid plasma levels           7               25 0.003248211     1
                 Aortic root size           7              183 0.003264350     0
#---------------
# 按照GO的pval排序渤闷,從小到大
dat<-dat[order(dat$PValue),]
# 給排序后的Term編號,用作X-axis
group<-c(1:nrow(dat))
dat<-cbind(group,dat)
# 將label設為因子變量脖镀,便于fill
dat$label<-factor(dat$label)
#--------------------------------------
# 作圖
#--------------------------------------
# 通用參數(shù)
# 畫圖區(qū)域外的空白框設置
mg_l <- margin(0, 0, 0, 0, 'lines') # 方向: 上右下左

# 先分別用ggplot2畫好每一個子圖
# logP
mg_1 <- unit(c(0, 0, 0.3, 0), "lines")  # 方向: 上右下左
# 之所以求logP而不是-logP飒箭,是為了讓bar是從頂部往下繪制,最終呈現(xiàn)圖中向左繪制的效果
# 因為logP是負值蜒灰,所以X tick的label需要自定義重新設置label
limit_1 <- c(min(log10(dat$PValue))-0.5, 0)
break_1 <- seq(from = 0, to = min(log10(dat$PValue)), by = -1)
label_1 <- seq(from = 0, to = abs(min(log10(dat$PValue))), by = 1)
# 之所以在這里第一個label設為空弦蹂,是為了后面拼圖時原點只有一個0,而不是兩個0,更好看些
# 在geneCount的label里第一個label不會設置為空
label_1[1]<-""
# 這里想要強調(diào)的條目設置成紅色,更醒目
# 這里顏色的fill = label
fillCol<-c(rgb(244,153,30,max=255),rgb(255,0,0,max=255))
fillCol_brk<-c(0,1)
# limits = c(0.5, (nrow(dat) + 0.5)), breaks = 1:nrow(dat)
# 為了后面統(tǒng)一各個子圖上term位置的一致性
p_logP <- ggplot(dat) +
  geom_bar(aes(x=group, y=log10(PValue),fill=label), stat="identity", position="dodge",width = 0.5) +
  scale_y_continuous(limits = limit_1, breaks = break_1,labels = label_1,expand = expand_scale()) +
  scale_x_continuous(limits = c(0.5, (nrow(dat) + 0.5)), breaks = 1:nrow(dat),labels = NULL, expand = expand_scale(), position = 'top') +
  scale_fill_manual(values = fillCol,breaks=fillCol_brk)+
  theme(plot.margin = mg_1, axis.text = element_text(margin = mg_l),axis.ticks.y = element_blank()) +
  xlab(NULL) +
  ylab("-Log10(Pvalue)") +
  coord_flip() + 
  guides(fill = FALSE)

# GeneCount
mg_2 <- unit(c(0, 0, 0.3, 0), "lines")  # 方向: 上右下左
max_geneNum<-max(dat$Inputnumber)
limit_2 <- c(0,max_geneNum+1)
dig_temp<-nchar(as.character(max_geneNum))
by <- round(max_geneNum/(5 * 10^(dig_temp - 2))) * 10^(dig_temp - 2)
break_2 <- seq(from = 0, to = max_geneNum, by = by)
# 這里設置label是為了更美觀乡小,label沒有小數(shù)點
label_2 <- seq(from = 0, to = max_geneNum, by = by)

p_geneCount <- ggplot(dat) +
  geom_bar(aes(x=group, y=Inputnumber), fill="#696969",stat="identity", position="dodge",width = 0.5) +
  geom_text(aes(x=group, y=Inputnumber,label=Inputnumber),hjust=-0.5)+
  scale_y_continuous(limits = limit_2,breaks = break_2,labels = label_2,expand = expand_scale()) +
  scale_x_continuous(limits = c(0.5, (nrow(dat) + 0.5)), breaks = 1:nrow(dat),labels = NULL, expand = expand_scale(), position = 'top') +
  theme(plot.margin = mg_2, axis.text = element_text(margin = mg_l),axis.ticks.y = element_blank()) +
  xlab(NULL) +
  ylab("No. of genes") +
  coord_flip() + 
  guides(fill = FALSE)

# Function term
text_x <- rep(1, nrow(dat))
text_y <- 1:nrow(dat)
text_lab<-dat$Term
mg_3 <- unit(c(0, 0.3, 2.3, 0), "lines") # 方向: 上右下左

p_GoName <- ggplot() + 
  geom_text(aes(x = text_x, y= text_y, label = text_lab), hjust=1,size = 4) +
  scale_x_continuous(limits = c(0,1), breaks = NULL, expand = expand_scale()) +
  scale_y_continuous(limits = c(0.5, (nrow(dat) + 0.5)), breaks = NULL, expand = expand_scale()) +
  labs(x = NULL, y = NULL) + 
  theme(plot.margin = mg_3,
        axis.text = element_text(margin = mg_l),
        panel.grid.major =element_blank(),
        panel.grid.minor = element_blank(),
        panel.background = element_blank()) 
# 分面畫圖
# 寫一個簡易函數(shù)調(diào)用viewport
vplayout <- function(x, y){
  viewport(layout.pos.row = x, layout.pos.col = y)
}

grid.newpage()  ##新建頁面
pushViewport(viewport(layout = grid.layout(1, 3)))
# goTerm logP GeneNum
print(p_GoName, vp = vplayout(1, 1))
print(p_logP, vp = vplayout(1, 2))
print(p_geneCount, vp = vplayout(1, 3))

最終效果圖:


轉(zhuǎn)載請標明出處和作者 ^+^

撰文 & 編輯:VickieQ
校對:HCLO4 & 花毛


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市脑漫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌咙崎,老刑警劉巖优幸,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異叙凡,居然都是意外死亡劈伴,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門握爷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人严里,你說我怎么就攤上這事新啼。” “怎么了刹碾?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵燥撞,是天一觀的道長。 經(jīng)常有香客問我,道長物舒,這世上最難降的妖魔是什么色洞? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮冠胯,結(jié)果婚禮上火诸,老公的妹妹穿的比我還像新娘。我一直安慰自己荠察,他們只是感情好置蜀,可當我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著悉盆,像睡著了一般盯荤。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上焕盟,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天秋秤,我揣著相機與錄音,去河邊找鬼脚翘。 笑死航缀,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的堰怨。 我是一名探鬼主播芥玉,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼备图!你這毒婦竟也來了灿巧?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤揽涮,失蹤者是張志新(化名)和其女友劉穎抠藕,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蒋困,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡盾似,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了雪标。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片零院。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖村刨,靈堂內(nèi)的尸體忽然破棺而出告抄,到底是詐尸還是另有隱情,我是刑警寧澤嵌牺,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布打洼,位于F島的核電站龄糊,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏募疮。R本人自食惡果不足惜炫惩,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望阿浓。 院中可真熱鬧他嚷,春花似錦、人聲如沸搔扁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽稿蹲。三九已至扭勉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間苛聘,已是汗流浹背涂炎。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留设哗,地道東北人唱捣。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像网梢,于是被迫代替她去往敵國和親震缭。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,762評論 2 345