其实图形的基本组成都很简单,无非就是点、线、矩形、圆圈等,但是稍作改变就会变成完全不同的图。就好像PCA图和火山图一样,本质都是点图。今天我们来讲一讲条形图的变形。
首先来看看几张不一样的“条形图”。
这几张图乍一看和我们之前看到的很不一样,但是仔细一看其所用的基本元素不就是我们的条形图吗?
左边的和中间的我们称为偏差图,右侧的称为金字塔图。
可以看到三张图之间都有一些相同点。那么这三张图我们可以用于展示什么样的数据呢,举个例子,比如我们想要展示转录组数据。
那么第一张图绿色的可以用于展示top10表达量增高的基因,红色的可以展示top10表达量下降的基因,横坐标可以用于展示Foldchange。
第二张图,比如我们转绿组的数据是个时间梯度的数据,分别检测了刺激后2个小时、4个小时、8个小时、12个小时的转录组数据。那么我们就可以展示这四个时间点的样本与对照组变化基因的情况。左侧(暖色部分)可以展示表达量降低的基因,右侧(冷色部分)可以展示表达量升高的基因,因此横坐标为基因数量。而具体的颜色可以展示他们的功能比如GO数据库的功能,也可以用于展示Folachange的倍数,比如红色为上调6倍以上的,橘黄色为3倍以上,黄色为2倍以上,那可以看到只有少部分的基因是6倍以上。
那么最后一张图呢?可以像上述描述的展示多组转录组数据上调或者下调。那也可以展示富集聚类的结果。如某个功能中显著改变和不改变的基因等。
那么上述的图应该怎么做呢?
1)需要什么格式的数据
#获取数据
dat <- read.csv("https://raw.githubusercontent.com/selva86/datasets/master/email_campaign_funnel.csv")
观察一下这个数据,可以看到Users中为了能够在x轴正负半轴分别现实所以Male为负数,Female的值为正数。因此,如果我们想要用自己的数据做这类图,也要注意正负,要对数据进行适当的处理,对其中一部分的数据取负。
2)如何作图
金字塔图
library(ggplot2)
library(RColorBrewer)
ggplot(dat,aes(x=Stage,y=Users))+
geom_bar(stat = "identity",aes(fill=Gender))+
scale_fill_brewer(palette='Set1')+
theme_bw()+
coord_flip()
1)需要什么格式的数据
dat$Group<-paste(dat$Stage,dat$Gender,sep="_")
dat<-arrange(dat,dat$Gender,dat$Stage)#先按Gender排列再按Stage排列
dat$Group<-factor(dat$Group,levels=rev(unique(dat$Group)))
labelname<-rep(rev(unique(dat$Stage)),2)
ggplot(dat,aes(x=Group,y=Users))+
geom_bar(stat = "identity",aes(fill=Gender))+
scale_fill_brewer(palette='Set1')+
scale_x_discrete(labels = labelname)+
theme_bw()+
xlab("")+
coord_flip()
color_palette<-colorRampPalette(brewer.pal(8,"Paired"))(18)
ggplot(dat,aes(x=Gender,y=Users))+
geom_bar(stat = "identity",aes(fill=Stage))+
scale_fill_manual(values=color_palette)+
theme_bw()+
theme(
legend.position = c("bottom"),
legend.margin = margin(1,0,1,0)
)+
xlab("")+
coord_flip()
本文作者蒋刘一琦,自嘲是一个有艺术追求的生信狗,毕业于浙江大学生物信息学专业,目前在复旦大学就读研究生,研究方向为宏基因组。