R画上下调柱状图

需求

  最近做个性化分析,突然发现一张能够很好反应差异富集的柱状图,如下图所示;

R画上下调柱状图_第1张图片
富集分析上下调图

  上图右侧表示上调代谢通路,左侧代表下调代谢通路,上下调分别有不同的颜色,中间灰色代表没有显著性的结果。

测试数据生成

  生成的测试数据集来源网上,主要为x、y两个数据,以及后续对数据的处理。

library(ggplot2)#用于可视化
library(dplyr)#用于数据处理
set.seed(1111)#此命令保证数据结果可以重现在任何电脑上
x <- 1980+1:36#赋值x
y <- round(100*rnorm(36))#赋值y
mydata <- data.frame(x=x, y=y)#创建数据集mydata
head(mydata)
mydata <- mydata%>%mutate(x_t=ifelse(y>=0,-4*nchar(x), 4*nchar(x))) #生成label的坐标
head(mydata)

测试数据集处理

  由于需要将y值的绝对值中间的为非显著性的条目,因此需要在矩阵中添加一列,这一列,上调为yes,下调的为no,不显著的为not significant。

max<-50
min<- -50
sig<-c()
for (i in mydata$y ){
    print(i)
    significant<-''
    if(i>=max){significant<-'yes'}else if(i< 0 && abs(i) >= max ){significant<-'no'}else if(min

画图

  画图命令如下:

mydata$x<-as.character(mydata$x)  #将数字变量转换成字符串变量,防止画图自动排序
mydata<-mydata[order(mydata$y),]
mydata$significant<-sig
mydata$significant<-factor(mydata$significant,levels=c('yes','not significant','no'))#设置排序
mydata$x<-factor(mydata$x,levels=mydata$x)
ggplot(data=mydata, aes(x=x, y=y, fill=significant))+geom_bar(stat = "identity",position = "identity",width=0.9)+coord_flip()+scale_fill_manual(values = c("purple",'grey', "blue"), guide=FALSE)+xlab("Year")+geom_text(aes(y=x_t,label=x), vjust=0.3, color="black",size=3)+geom_abline(linetype="dashed",intercept = 50, slope = 0,size=1,colour='gray')+geom_abline(linetype="dashed",intercept = -50, slope = 0,size=1,colour='gray')+theme(panel.grid=element_blank(),panel.border=element_blank(),axis.title.y=element_blank(),axis.text.y=element_blank(),axis.ticks.y=element_blank())

R画上下调柱状图_第2张图片
代谢通路上下调图

  设定不显著性的阈值为(-50,50),阈值有虚线表示,此图颜色与最开始需求图颜色不一致,这个可以修改,不在这里详述了

修改

后记

修改颜色:

ggplot(data=mydata, aes(x=x, y=y, fill=significant))+geom_bar(stat = "identity",position = "identity",width=0.9)+coord_flip()+scale_fill_manual(values = c("#1C86EE",'grey', "#90EE90"), guide=FALSE)+xlab("Year")+geom_text(aes(y=x_t,label=x), vjust=0.3, color="black",size=3)+geom_abline(linetype="dashed",intercept = 50, slope = 0,size=1,colour='gray')+geom_abline(linetype="dashed",intercept = -50, slope = 0,size=1,colour='gray')+theme(panel.grid=element_blank(),panel.border=element_blank(),axis.title.y=element_blank(),axis.text.y=element_blank(),axis.ticks.y=element_blank())
R画上下调柱状图_第3张图片
修改颜色后图片

你可能感兴趣的:(R画上下调柱状图)