**********************************************
一、R之ggplot初体验 -- 柱状图
数据类型,表格数据名字new
/////////////////////////////////////////////////////////////
cultivars TF_family num_of_gene
IRAT109 MYB/MYB_related 8
IRAT109 WRKY 5
IRAT109 CO-like 3
IRAT109 DBB 3
IRAT109 ERF 3
IRAT109 bZIP 2
IRAT109 Dof 2
IRAT109 G2-like 2
IRAT109 HSF 2
IRAT109 bHLH 1
IRAT109 HD-ZIP 1
IRAT109 NAC 1
IRAT109 Trihelix 1
ZS97B MYB/MYB_related 7
ZS97B CO-like 6
ZS97B HSF 4
ZS97B ERF 4
ZS97B WRKY 4
ZS97B bHLH 3
ZS97B DBB 2
ZS97B NAC 1
ZS97B Dof 1
ZS97B G2-like 1
ZS97B HD-ZIP 1
ZS97B bZIP 1
ZS97B Trihelix 1
////////////////////////////////////////////////////////////////
cmd:
.......................作图...........................
library(ggplot2)
library(gcookbook) ##为了使用数据
a<-read.table("new",header=T,sep="\t")
ggplot(a,aes(x=TF_family,y=num_of_gene,fill=cultivars))+geom_bar(position="dodge",stat="identity") #new数据集包含两个分类变量,cultivars和num_of_gene,分别将其映射到x和fill
★ 必须使用命令参数position="dodge"将两组条形在水平上分开,否则会输出堆积条形图
作出的图横坐标排序为数据集a在TF_family这个因素的因子水平排序,a$TF_family
..............改变因子水平顺序...................
library(reshape2)
b<-dcast(a,TF_family~cultivars) 取出后俩列数据,并以 TF_family为行名,cultivars为列名
////////////////////////////////////////////////////////////////
TF_family IRAT109 ZS97B
1 MYB/MYB_related 8 7
2 CO-like 3 6
3 WRKY 5 4
4 ERF 3 4
5 HSF 2 4
6 DBB 3 2
7 bHLH 1 3
8 bZIP 2 1
9 Dof 2 1
10 G2-like 2 1
11 HD-ZIP 1 1
12 NAC 1 1
13 Trihelix 1 1
///////////////////////////////////////////////////////////////
b$sum<-b$IRAT109+b$ZS97B ###增加一列因素,且为两品种对应TF家族的基因的和
b<-b[order(-b$sum),] ##把b数据集的因子sum逆序排序 ****顺序排序b[order(-b$sum),]
a$TF_family<-factor(a$TF_family,levels=as.character(b$TF_family)) ###将数据集a的TF_family 因子水平按数据集b的TF_family因子水平排序 ★b$TF_family为因子水平,需转化字符
........................去背景.............................
p + theme_grey() ##默认的灰色主题
p + theme_bw() ##黑白主题
★ theme_set(theme_bw()) 将theme_bw()设为默认主题
.......................隐藏横坐标标签......................
p + theme(axis.title.x=element_blank())
.......................修改图例...........................
p + theme(legend.position=" top") ##指定的参数有top,left,right,bottom 顶部,左,右,底部
p + theme(legend.position=c(.85,.2)) + themme(legend.background = element_rect(fill = "white",colour = "black")) ###添加一个不透明的边界使其与图形分开
p + theme(legend.position=c(1,0),legend.justification=c(1,0)) ###legend.position设置图例坐标,(0,0)原点,左下角,(1,1)右上角 ;legend.justification用来指定图例框的那一部分被放到给定坐标处
p + scale_fill_discrete(limits("t1","t2","t3")) ###修改图例顺序
p + guides(fill=guide_legend(reverse=TRUE)) ###反转图例的顺序
p + labs(fill = "condition") ### 修改图例标题为condition
p + guides(fill=guide_legend(title = NULL)) ###移除图例标题
p + scale_fill_discrete(labels = c("a","b","c")) ###修改图例标签为a,b,c
......................去网格线.............................
p + theme(panel.grid.major = element_blank(),pane1.grid.minor = element_blank())
p + theme(panel.grid.major = element_blank.x(),pane1.grid.minor.x = element_blank()) ###隐藏纵向的网格线 -- 与x轴交汇
p + theme(panel.grid.major = element_blank.y(),pane1.grid.minor.y = element_blank())
p + theme(panel.grid.major=element_line(colour=NA))
..................倾斜横坐标标签..........................
p+theme(axis.text.x = element_text(angle=90, hjust=1)) ###element_text()是存储文字属性的函数,其内置属性如下:
@@@ family:字体
@@@ face:粗体、斜体等
@@@ size:字体大小
@@@ angle:倾斜角度
@@@ color:颜色
@@@ hjust和vjust ###标签靠近或远离坐标轴,标签偏移正对刻度位置多少
2、修改字体
其实就算知道可以用theme_text()修改属性,要改起来也是麻烦的事情,因为不知道内置属性的关键字有哪些。比如改字体,直接用"family="宋体""是不会改不了字体的。要提前设置一下字体:
初始化 windowsFonts(myFont1=windowsFont("Times New Roman"),myFont2=windowsFont("华文行楷"))
然后才可以用family来修改字体 Family="myfont1"
3、修改字体粗细
Face可以设置的属性有以下几个:
plain:普通
italic:斜体
bold:粗体
bold.italic:粗体+斜体
4、修改尺寸大小
这个比较简单,用数字代表字体大小即可,普通的字体可以设置为size=8。
5、修改角度
这个也比较简单,用数字代表角度大小,比如上图的angle=45,表示字体逆时针倾斜45°。范围是0-360。
7、修改颜色
用color或者colour都可以修改颜色,颜色用关键字来表示,或者用十六进制的颜色代码来表示。当然最简单的是用关键字来表示颜色,简单明白清楚,但是您可能会发现很难找到ggplot2可以设置的颜色单词。还好经过一番google,找到下图,以后设置颜色不用担心了,有参考了:
8、修改位置
修改位置用下面的参数:
hjust:调整横向位置
vjust:调整纵向位置
vjust=1
上面都设置数字,一般调整0.5左右,可以是负值。
...................设置坐标刻度域值...................
p + scale_y_continuous(limits = c(0,10)) ###将y轴的值域设置为0-10,也可设置为变量因素的最大值 max(a$num_of_gene)
p + ylim(0,10) ##等价于上一条
p + scale_y_continuous(limits = c(0,10),breaks = c (0,2,4,6,8,10)) ##breaks仅在scale_y_continuous()中管用,设置分度 breaks=seq(0,1,0.1))
p + coord_fixed(ratio = 1/2) ###按比例缩放x与y轴,
..................将Y轴的0刻度与x轴相交,不再延伸.....
scale_y_continuous(expand=c(0,0.01)) ##与上一条一起使用,不然对y轴的设置会重置
..................去外框线.............................
p + theme(panel.border = element_blank()) ###去掉外框线
p + theme(axis.line.y = element_line(colour = "black"),axis.line.x = element_line(colour = "black")) ###加坐标
..................去坐标轴刻度.............................
p + theme(axis.ticks=element_blank(),axis.text.y=element_blank(),axis.text.x=element_blank())
....................柱子显示数值.............................
geom_text(aes(label = num),vjust=-1.5) ##label=变量 显示需要显示的值,vjust 调整距离
................加标题,居中.........................................
p + labs(title="1" ) +theme(plot.title = element_text(hjust=0.5))