平常绘图可以参考这里。
使用barplot绘制水平柱形图
barplot(height=data$value, names=data$name,
xaxt="n", #去掉x轴,便于后面重新自定义绘制
xlim = c(0,15), #x轴范围
col="#0072B2",
xlab="",
main="Barplot", #大标题
horiz=T, las=1
)
axis(1,at=c(0,10)) #绘制x轴,at指标记 1,10 的点
- 一张水平柱形图就画好了!
水平柱形图
使用ggplot绘制双向柱形图
参考:公主【小白鱼的生统笔记 】!!!宝藏
这里我绘制的是基因的log2FoldChange图,当然最常见的是GO Term的pvalue图!都可以按照这个思路画。
- 数据准备
data <- read.csv('diff_gene.csv',sep=",",header=T) #数据仅两列log2FC.A.B.和gene_name
data <- data[order(data$log2FC.A.B.,data$gene_name,decreasing = c(TRUE,TRUE)),] #根据log2FC排序,这里就可以明显区分up(15)和down(7)基因
data1 <- data[c(16:22),] #取downregulate基因至data1
data1 <- data1[order(data1$log2FC.A.B., decreasing = FALSE), ]
data1$gene_name <- factor(data1$gene_name, levels = data1$gene_name)
id_down <- levels(data1$gene_name)
data2 <- data[-c(16:22),] #取upregulate基因至data2
data2$gene_name <- factor(data2$gene_name, levels = data2$gene_name)
id_up <- levels(data2$gene_name)
#如果要图好看一点的话,最好up和down的柱形大小一一对应,所以要把少的部分用空白补上。
data1$gene_name <- as.character(data1$gene_name)
for (i in paste('nn', as.character(seq(1, 8, 1)), sep = '')) data1 <- rbind(list(NA,i), data1) #up-down=8
data1 <- data1[order(data1$log2FC.A.B., decreasing = FALSE), ]
data1$gene_name <- factor(data1$gene_name, levels = data1$gene_name)
id_down <- c(id_down,rep('', 8)) #down补了8行空白
- 分别绘制左图右图
p_up <- ggplot(data2, aes(gene_name,-log2FC.A.B.)) +
geom_col(fill = "#447d7d", color = 'black', width = 0.6) +
theme(panel.grid = element_blank(), panel.background = element_rect(fill = 'transparent')) +
theme(axis.line.x = element_line(colour = 'black'), axis.line.y = element_line(colour = 'transparent'), axis.ticks.y = element_line(colour = 'transparent')) +
theme(plot.title = element_text(hjust = 0.5, face = 'plain')) +
geom_hline(yintercept = 0) +
coord_flip() +
labs(x = '', y = '', title = 'UP') +
scale_y_continuous(expand = c(0, 0), limits=c(-1.5,0), breaks = c(-1.5, -1, 0), labels = as.character(abs(c(-1.5, -1, 0)))) + #设置坐标轴很重要,可以直观看出数据是否在一定的范围内
scale_x_discrete(labels = id_up)
ggsave('p_up.pdf',p_up,width = 6,height = 5)
p_down <- ggplot(data1, aes(gene_name,-log2FC.A.B.)) +
geom_col(fill = "#293e7e", color = 'black', width = 0.6) +
theme(panel.grid = element_blank(), panel.background = element_rect(fill = 'transparent')) +
theme(axis.line.x = element_line(colour = 'black'), axis.line.y = element_line(colour = 'transparent'), axis.ticks.y = element_line(colour = 'transparent')) +
theme(plot.title = element_text(hjust = 0.5, face = 'plain')) +
geom_hline(yintercept = 0) +
coord_flip() +
labs(x = '', y = '', title = 'DOWN') +
scale_y_continuous(expand = c(0, 0), limits=c(0,1.5), breaks = c(0, 1, 1.5), labels = as.character(c(0, 1, 1.5))) + #设置坐标轴很重要,可以直观看出数据是否在一定的范围内
scale_x_discrete(labels = id_down, position = 'top')
ggsave('p_down.pdf',p_down,width = 6,height = 5)
- 合并两图
library(cowplot)
pdf('butterfly.pdf', width = 10, height = 5)
plot_grid(p_up, p_down, nrow = 2, ncol = 2, rel_heights = c(9, 1), labels = 'log2FoldChange', label_x = 0.5, label_y = 0, label_fontface = 'plain')
dev.off()
因为数据安全,我把涉事基因标签删了。还是很成功的!这图画的。
butterfly plot