搜索
查看: 4389|回复: 7

利用R语言画SSR位置标记

[复制链接]

2

主题

17

帖子

305

积分

版主

Rank: 7Rank: 7Rank: 7

积分
305
发表于 2016-9-4 13:30:14 | 显示全部楼层 |阅读模式
本帖最后由 秋叶麒麟 于 2016-9-4 13:36 编辑

利用R中的ggplot可以进行简易的SSR位置标记。记得有一个R包好像是专门做SSR位置标记画图的(具体名字忘了),但那个包我用的时候没能实现将多种数据同时出现在一张图中进行比较,所以后来还是通过用ggplot的方式重新画了一张图。代码谈不上怎么好,不过能画出来。嘿嘿,不废话,赶紧发车。首先我用的数据格式大致如下:

第一列是染色体号,第二列是ID,第三列是标记的位置,应该是以kb做单位,第四列是类型,标记类型为SSR或者Maker。(仅仅为示例数据哈!)。
代码及注释如下:
a<-reab.table(file="shili.txt",sep="\t",header=T) ##首先是读入示例数据,与\t分隔,首行为列名
这里是选取每条染色体最大位置作为染色体长度。所以需要提取每条染色体的最大位置。文件中总共有17条染色体。
b<-data.frame()  
for( i in 1:17){
  c<-a[a[,1]%in%i,]    #c就是从a中提取出来的只有一条染色体信息的子集
  b[i,1]<-max(c[,3])    #取出每条染色体的最大位置并放入b中
}                        
b[,2]=1:17


这样在b这个向量中第一列是每条染色长度,而第二列就是对应的染色体号了。
得到这些后,再做一部分提取。
d<-a[grep("SSR",a[,4]),]
e<-a[grep("Marker",a[,4]),]

d的内容中就是包含SSR类型的信息,e中则是之包含Marker类型的信息。下面开始画图了。
library(ggplot2)
p <-ggplot(a,aes(x=a[,1],y=a[,3]))+   ###先导入要画图的对象
  geom_segment(aes(x=e[,1]-0.3,y=e[,3],xend=e[,1]+0.3,yend=e[,3]),data=e,colour="black")+  ###这里主要就是用到geom_segment这个函数啦
  geom_segment(aes(x=b[,2],y=0,xend=b[,2],yend=b[,1]),data = b,colour="black")+  ###利用b向量画出染色体长度界线
  geom_segment(aes(x=d[,1]-0.3,y=d[,3],xend=d[,1]+0.3,yend=d[,3]),data=d,colour="blue",cex=1)+ ###利用ggplot图层叠加的思想,这里每次都要给正确的画图对象哈!
  labs(x="Linkage group number",y ="Genetic distance")+   ###加上坐标轴名字
  scale_x_continuous(breaks=c(1:17))+theme_bw()%+replace%   ###给x轴下标
  theme(panel.background=element_rect(fill=NA))  ###这里想的是去背景

好了,然后就可以出结果了:

示例结束了。下面我们总结一下:
1、从这个图其实我们能想到更多,例子就是两个geom_segment画成的图的叠层,其实ggplot的其他函数也可以的,经常有人说我要同时画两条曲线怎么办,我要画混合散点图怎么。就是跟例子一样,无非就是geom_line(某某)+geom_line(某某),geom_point(某某)+geom_point(某某),然后每个对象你都最好用不同颜色标记开,你画几条曲线都不是问题。同时再发散下散点图加曲线也是这样,只要你明确好给的对象就可以了。
2、从生物学角度我们再看这图,其实这也不仅仅用于SSR,基本上这种染色体位置的都行。当然把图倒过来就更好看了。比如你把文件的type换成其他类型,例如我想看看两条通路的基因在染色体上的位置,其实就是把type换成通路名,前面给上自己感兴趣的位置信息举行。当然如果知道染色体长度,那每条染色体的长度信息还是要给的,导入的b变量里面即可。嗯,暂时我就想到这么多了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x



上一篇:ontonoly的概念及大全
下一篇:data.table 必须的R package
回复

使用道具 举报

2

主题

15

帖子

1080

积分

金牌会员

Rank: 6Rank: 6

积分
1080
发表于 2016-9-4 21:04:51 | 显示全部楼层
感谢分享
回复

使用道具 举报

634

主题

1182

帖子

4022

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4022
发表于 2016-9-5 19:36:03 | 显示全部楼层
看起来很棒,代码注释的也很清晰,是我们这些帖子里面比较出色的一个!看得出来你的R绘图功底不错,好好加油,ggplot做可视化是一个比较不错的选择
你这个问题很复杂,需要打赏,请点击 http://www.bio-info-trainee.com/donate 进行打赏,谢谢
回复 支持 反对

使用道具 举报

0

主题

1

帖子

39

积分

新手上路

Rank: 1

积分
39
发表于 2016-10-10 23:45:29 | 显示全部楼层
很棒!!学到东西了
回复 支持 反对

使用道具 举报

0

主题

5

帖子

62

积分

注册会员

Rank: 2

积分
62
发表于 2016-10-27 12:32:23 | 显示全部楼层
新人目前还看不懂,先赞一个
回复 支持 反对

使用道具 举报

0

主题

1

帖子

33

积分

新手上路

Rank: 1

积分
33
发表于 2018-3-13 09:11:04 | 显示全部楼层
谢谢分享
回复

使用道具 举报

0

主题

3

帖子

123

积分

注册会员

Rank: 2

积分
123
发表于 2018-4-10 15:57:22 | 显示全部楼层
学习了,谢谢!
回复 支持 反对

使用道具 举报

0

主题

1

帖子

927

积分

高级会员

Rank: 4

积分
927
发表于 2018-9-1 08:15:48 | 显示全部楼层
感觉这个挺有用的,谢谢分享
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|生信技能树    

GMT+8, 2018-12-12 05:28 , Processed in 0.037681 second(s), 29 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.