R2-03 第七次作业-火山图

微思微丝 2017-12-17 23:45:32 阅读: 1368

R语言之ggplot画火山图

任务1:

先画一个与主题无关的柱状图:

library(ggplot2)
a<-table(mtcars$gear,mtcars$cyl)
col<-c("lightblue","lightgreen","pink")
png("E:/PNG/R2/R2-7-火山图/R2-03-13.png")
barplot(a,xlab="cyl",ylab="count",col=col,main='R2-03-13')
legend("topleft",legend=rownames(table(mtcars$gear)),pch=22,cex=1.2,
fill=col,bty="n")
dev.off()

R2-03-13.png

再画一个简略图:

library(ggplot2)
a<-ggplot(mtcars,aes(x=factor(cyl),fill=factor(gear),color=factor(gear))
          main="R2-03-14")
b<-a+geom_bar()
b
ggsave("E:/PNG/R2/R2-7-火山图/R2-03-14.png",width=4,height=4)

R2-03-14.png

然后在画一个主题修改图:

library(ggplot2)
mytheme<-
  theme_bw(base_size = 16,base_family = "Times")+##默认为无衬线的Helvetica,默认大小为12. 
  theme(plot.title = element_text(colour = "orange",size=20,face ="bold.italic",hjust=0,vjust = 1))+
  theme(plot.subtitle=element_text(colour="red",size=13,hjust=0,vjust = 0.9))+
  theme(plot.caption = element_text(face="bold.italic",colour="purple",hjust = 1,vjust=0))+
  theme(legend.position = "none")+
  theme(axis.line = element_line(colour = "red"),panel.border = element_blank())+
  theme(panel.grid.major = element_blank(),panel.grid.minor = element_blank())
ggplot(mtcars,aes(x=factor(cyl),fill=factor(gear),color=factor(gear)))+##color=factor(gear)可要可不要
       labs(x="cyl",y="count",title="R2-03-15",
          subtitle="Volcano Plot",caption="HW20171216")+##可写成+xlab("cyl")+ylab("count")
       geom_bar(width = 0.6)+
mytheme  
ggsave("E:/PNG/R2/R2-7-火山图/R2-03-15.png",width=4,height=4)

R2-03-15.png

任务2:

1)通过“ggplot2”和“Cairo”两包来画火山图:(图形太大,不可直接上传,该图为截图)

library(ggplot2)
library(Cairo)
data<-read.csv(file="E:/PNG/R2/R2-7-火山图/R2-第七期作业-火山图/nature23643-s4.csv",header=T)
data$threshold <- as.factor(ifelse(data$q_value < 0.05 & abs(log2(data$FC))>=1,
                                   ifelse(log2(data$FC)> 1 ,'Up','Down'),'Not'))
Cairo(file="E:/PNG/R2/R2-7-火山图/volcan_PNG-4.png", ##Cairo包是R语言的高质量图形渲染库
      units="in",
      bg="white",
      width=4, 
      height=6, 
      pointsize=12, 
      dpi=300)
ggplot(data,aes(x=log2(FC),y =-log2(q_value),colour=threshold,size=threshold))+
  geom_point(alpha=1,size=3)+
  xlim(-2.4,2.6)+ylim(-0.5,15)+
  scale_color_manual(values=c("blue","grey","red"))+
  labs(title = "CMTM6 sgRNA2 vs Control",
       caption = "created by R2-03",
       subtitle="Volcano Plot-R2-03-16")+    
  labs(x = expression(log[2])) +         
  labs(x = expression(paste(log[2],"(fold change)")),
       y = expression(paste(-log[2],"(Q value)")))+
  geom_vline(xintercept=0,lty=5,col="black",lwd=0.6)+
  geom_vline(xintercept=c(-1,1),lty=4,col="grey",lwd=0.5)+ 
  geom_hline(yintercept = -log2(0.5),lty=4,col="grey",lwd=0.5)+
mytheme
dev.off()

 

PNG-4-1.png

2)通过“ggplot2”和“latex2exp”、“ggrepel”三包来画火山图:

library("ggplot2")
library("latex2exp")
library("ggrepel")
data<-read.csv(file="E:/PNG/R2/R2-7-火山图/R2-第七期作业-火山图/nature23643-s4.csv",header=T)
data$threshold <- as.factor(ifelse(data$q_value < 0.05 & abs(log2(data$FC))>=1,
                                   ifelse(log2(data$FC)>1 ,'Up','Down'),'Not'))
data1<-subset(data,threshold== ifelse(log2(data$FC)>1 ,'Up','Down'))##选出上调和下调的数据,最好看下所选数据
data1
Cairo(file="E:/PNG/R2/R2-7-火山图/volcan_R2-03.png",
      units="in",bg="white", width=8, height=6, 
      pointsize=12, dpi=300)
ggplot(data,aes(x = log2(FC) , y = -log2(q_value)))+ 
  geom_point(col = "grey70",alpha = 1)+  
  xlim(-2.5,2.7) +ylim(-0.8,15)+  
  geom_point(data=data1,aes(x = log2(FC),y = -log2(q_value),col = Gene.ID),size =4,
  ##注意有两个geom_point时需注明具体数据名,下同。
             position = position_jitter(height = 0.1,width = 0)) + 
  geom_text_repel(data=data1,aes(label =Gene.ID ),size =3,col = "black",fontface = "italic")+  
  annotate("segment", x = 1 , xend = 2.5, y =-0.6,yend  = -0.6 ,color = "black",
           size = 1,arrow = arrow(angle = 18,ends = "last",type = "closed")) +
  annotate("segment", x = -1 , xend = -2.5, y = -0.6,yend  = -0.6 ,color = "black",
           size = 1,arrow = arrow(angle = 18,ends = "last",type = "closed")) +
  annotate("text",x = 1.7,y = 0.3,label = "Upregulated",size = 4.5) +
  annotate("text",x = -1.7,y = 0.3,label = "Downregulated",size = 4.5)  +
  geom_vline(xintercept=0,lty=5,col="black",lwd=0.6)+
  geom_vline(xintercept=c(-1,1),lty=4,col="grey",lwd=0.5)+ 
  geom_hline(yintercept = -log2(0.5),lty=4,col="grey",lwd=0.5)+
  labs(title = "CMTM6 sgRNA2 vs Control",
       caption = "created by R2-03",
       subtitle="Volcano Plot-R2-03-17")+    
  labs(x = expression(log[2])) +         
  labs(x = expression(paste(log[2],"(fold change)")),
       y = expression(paste(-log[2],"(Q value)")))+
  mytheme
dev.off()


volcano_R2-03-1.png

写在后面:

       此次代码是我学R以来写的最长的一次,出题人的奇思妙想我算是见识了,也被虐了好久,,深刻地体会到了一个“码农”的不易。但只要思路是对的,一个好的模板可以延伸出多种可能。终于写完了,放烟花。。


 

 

 

 

 

 

 

 

 

 
邀请讨论

附件

{{f.title}} 大小 {{f.file_size}} 下载 {{f.count_download}} 金币 {{f.count_gold}}
{{item.nick_name}} 受邀请回答 {{item.create_time}}
{{item.refer_comment.nick_name}} {{item.refer_comment.create_time}}

附件

{{f.title}} 大小 {{f.file_size}} 下载 {{f.count_download}} 金币 {{f.count_gold}}
切换到完整回复 发送回复
赞({{item.count_zan}}) 踩({{item.count_cai}}) 删除 回复 关闭
科研狗©2015-2024 科研好助手,京ICP备20005780号-1 建议意见

服务热线

178 0020 3020

微信服务号