R语言学习之线图的绘制详解_第1页
R语言学习之线图的绘制详解_第2页
R语言学习之线图的绘制详解_第3页
R语言学习之线图的绘制详解_第4页
R语言学习之线图的绘制详解_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第R语言学习之线图的绘制详解目录线图单线图多线图横轴文本线图

线图

线图是反映趋势变化的一种方式,其输入数据一般也是一个矩阵。

单线图

假设有这么一个矩阵,第一列为转录起始位点及其上下游5kb的区域,第二列为H3K27ac修饰在这些区域的丰度,想绘制一张线图展示。

profile="Pos;H3K27ac

-5000;8.7

-4000;8.4

-3000;8.3

-2000;7.2

-1000;3.6

0;3.6

1000;7.1

2000;8.2

3000;8.4

4000;8.5

5000;8.5"

读入数据(经过前面几篇的联系,这应该都很熟了)

profile_text-read.table(text=profile,header=T,s=1,quote="",sep=";")

profile_text

H3K27ac

-5000

8.7

-4000

8.4

-3000

8.3

-2000

7.2

-1000

3.6

0

3.6

1000

7.1

2000

8.2

3000

8.4

4000

8.5

5000

8.5

#在melt时保留位置信息

#melt格式是ggplot2画图最喜欢的格式

#好好体会下这个格式,虽然多占用了不少空间,但是确实很方便

#这里可以用`xvariable`,也可以是其它字符串,但需要保证后面与这里的一致

#因为这一列是要在X轴显示,所以起名为`xvariable`。

profile_text$xvariable=rownames(profile_text)

library(ggplot2)

library(reshape2)

data_m-melt(profile_text,id.vars=c("xvariable"))

data_m

xvariablevariablevalue

1

-5000

H3K27ac

8.7

2

-4000

H3K27ac

8.4

3

-3000

H3K27ac

8.3

4

-2000

H3K27ac

7.2

5

-1000

H3K27ac

3.6

6

0

H3K27ac

3.6

7

1000

H3K27ac

7.1

8

2000

H3K27ac

8.2

9

3000

H3K27ac

8.4

10

4000

H3K27ac

8.5

11

5000

H3K27ac

8.5

然后开始画图,与上面画heatmap一样。

#variable和value为矩阵melt后的两列的名字,内部变量,variable代表了点线的属性,value代表对应的值。

p-ggplot(data_m,aes(x=xvariable,y=value),color=variable)+geom_line()

#图会存储在当前目录的Rplots.pdf文件中,如果用Rstudio,可以不运行dev.off()

dev.off()

满心期待一个倒钟形曲线,结果,

什么也没有。

仔细看,出来一段提示

geom_path:Eachgroupconsistsofonlyoneobservation.

Doyouneedtoadjustthegroupaesthetic

原来默认ggplot2把每个点都视作了一个分组,什么都没画出来。而data_m中的数据都来源于一个分组H3K27ac,分组的名字为variable,修改下脚本,看看效果。

p-ggplot(data_m,aes(x=xvariable,y=value,color=variable,group=variable))+

geom_line()+theme(legend.position=c(0.1,0.9))

dev.off()

图出来了,一条线,看一眼没问题;再仔细看,不对了,怎么还不是倒钟形,原来横坐标错位了。

检查下数据格式

summary(data_m)

xvariable

variable

Length:11

H3K27ac:11

Class:character

Mode

:character

问题来了,xvariable虽然看上去数字,但存储的实际是字符串(因为是作为行名字读取的),需要转换为数字。

data_m$xvariable-as.numeric(data_m$xvariable)

#再检验下

is.numeric(data_m$xvariable)

[1]TRUE

好了,继续画图。

#注意断行时,加号在行尾,不能放在行首

p-ggplot(data_m,aes(x=xvariable,y=value,color=variable,group=variable))+

geom_line()+theme(legend.position=c(0.1,0.8))

dev.off()

图终于出来了,调了下legend的位置,看上去有点意思了。

有点难看,如果平滑下,会不会好一些,stat_smooth可以对绘制的线进行局部拟合。在不影响变化趋势的情况下,可以使用(但慎用)。

p-ggplot(data_m,aes(x=xvariable,y=value,color=variable,group=variable))+

geom_line()+stat_smooth(method="auto",se=FALSE)+

theme(legend.position=c(0.1,0.8))

dev.off()

从图中看,趋势还是一致的,线条更优美了。另外一个方式是增加区间的数量,线也会好些,而且更真实。

stat_smooth和geom_line各绘制了一条线,只保留一条就好。

p-ggplot(data_m,aes(x=xvariable,y=value,color=variable,group=variable))+

stat_smooth(method="auto",se=FALSE)+theme(legend.position=c(0.1,0.8))

dev.off()

好了,终于完成了单条线图的绘制。

多线图

那么再来一个多线图的例子吧,只要给之前的数据矩阵多加几列就好了。

profile="Pos;h3k27ac;ctcf;enhancer;h3k4me3;polII

-5000;8.7;10.7;11.7;10;8.3

-4000;8.4;10.8;11.8;9.8;7.8

-3000;8.3;10.5;12.2;9.4;7

-2000;7.2;10.9;12.7;8.4;4.8

-1000;3.6;8.5;12.8;4.8;1.3

0;3.6;8.5;13.4;5.2;1.5

1000;7.1;10.9;12.4;8.1;4.9

2000;8.2;10.7;12.4;9.5;7.7

3000;8.4;10.4;12;9.8;7.9

4000;8.5;10.6;11.7;9.7;8.2

5000;8.5;10.6;11.7;10;8.2"

profile_text-read.table(text=profile,header=T,s=1,quote="",sep=";")

profile_text$xvariable=rownames(profile_text)

data_m-melt(profile_text,id.vars=c("xvariable"))

data_m$xvariable-as.numeric(data_m$xvariable)

#这里group=variable,而不是group=1(如果上面你用的是1的话)

#variable和value为矩阵melt后的两列的名字,内部变量,variable代表了点线的属性,value代表对应的值。

p-ggplot(data_m,aes(x=xvariable,y=value,color=variable,group=variable))+

stat_smooth(method="auto",se=FALSE)+theme(legend.position=c(0.85,0.2))

dev.off()

横轴文本线图

如果横轴是文本,又该怎么调整顺序呢?还记得之前热图旁的行或列的顺序调整吗?重新设置变量的factor水平就可以控制其顺序。

profile="Pos;h3k27ac;ctcf;enhancer;h3k4me3;polII

-5000;8.7;10.7;11.7;10;8.3

-4000;8.4;10.8;11.8;9.8;7.8

-3000;8.3;10.5;12.2;9.4;7

-2000;7.2;10.9;12.7;8.4;4.8

-1000;3.6;8.5;12.8;4.8;1.3

0;3.6;8.5;13.4;5.2;1.5

1000;7.1;10.9;12.4;8.1;4.9

2000;8.2;10.7;12.4;9.5;7.7

3000;8.4;10.4;12;9.8;7.9

4000;8.5;10.6;11.7;9.7;8.2

5000;8.5;10.6;11.7;10;8.2"

profile_text-read.table(text=profile,header=T,s=1,quote="",sep=";")

profile_text_rownames-s(profile_text)

profile_text$xvariable=rownames(profile_text)

data_m-melt(profile_text,id.vars=c("xvariable"))

#就是这一句,会经常用到

data_m$xvariable-factor(data_m$xvariable,levels=profile_text_rownames,ordered=T)

#geom_line设置线的粗细和透明度

p-ggplot(data_m,aes(x=xvariable,y=value,color=variable,group=variable))+

geom_line(size=1,alpha=0.9)+theme(legend.position=c(0.85,0.2))+

theme(axis.text.x=element_text(angle=45,hjust=1,vjust=1))

#stat_smooth

#p-ggplot(data_m,aes(x=xvariable,y=value,color=variable,group=variable))+

#

stat_smooth(method="auto",se=FALSE)+theme(legend.position=c(0.85,0.2))+

#

theme(axis.te

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论