Fishiplot

碎碎念

第一次接触R语言,这个画图包也很新,五六年前开始用的感觉。因为我本身不是做肿瘤基因相关的内容,所以主要用于刻画肿瘤生长的fishplot对我来说重点是了解它的使用方法和输入输出的抽象意义。

【学习资料】
Github
RDocumentation
论文 Visualizing tumor evolution with the fishplot package for R

初识

论文理解

we have developed an R package(“fishplot”) that takes estimates of subclonal prevalence at different timepoints, and outputs publication-ready images that accurately represent subclonal relationships and their relative proportions.

fishplot的主要功能是在肿瘤生长的过程中,估计不同时间点上肿瘤的亚克隆流行率,输出的图像主要体现了亚克隆群体的比例以及相关关系。

亚克隆(subclonal)指的是肿瘤生长的过程中,肿瘤细胞会发生分裂增殖,其中基因片段或者其他大分子会发生变异,使得尽管该细胞仍然是肿瘤的一部分,但是其生长速度、侵袭能力、对药物的敏感性均可能出现差异,即肿瘤异质性产生。流行率(prevalence)的含义是在某个时间点新旧病例的比例。(本人并不是医学相关专业,这些名词的理解均来自于百度和知乎)

抽象来说,可以理解为群体A随着时间推进逐渐产生了群体B,AB之间即为亲子代的关系,在时刻t采样,B有b1个样本,时刻t+1采样,B有b2个样本,则在t+1时刻,流行率为(b2-b1)/ b1。而fish plot就是将群体的占比随时间的变化刻画出来。

R安装

install.packages("devtools")
library(devtools)
library(usethis) # 这一步是我自己运行后一条出现的提示,才运行的
install_github("chrisamiller/fishplot")

使用

根据官方给出的实例,首先需要构建一个object,然后进行画图。

createFishObject

输入数据,创建基础的Fish结构数据。

fish = createFishObject(frac.table, parents, timepoints = NULL, 
                        col = NULL, clone.labels = NULL, fix.missing.clones = FALSE)
  • timepoints:数字向量,表示采用时间点。
timepoints=c(0,34,69,187,334,505,530)
  • parents:数字向量,表示亚群之间的亲代和子代关系,pi=j,表示第i个亚群的上一代是第j个亚群,若pi=0,则表示该亚群为初始族群。如下所示,记亚群为Vi,i= 1,2,3,……,7:
parents=c(0,1,1,1,3,4,0)

在这里插入图片描述

  • frac.table:数字矩阵,表示所有时间点上所有亚群的fraction估计。每一列代表一个亚群,每一行代表每个时间点上的亚群占比。
frac.table = matrix(
  c(99, 30,     2, 60, 0,     2, 1,
    1,   0,   0.1, 00, 0,     0, 1,
    3,   0,   2.5, 00, 0,     0, 1,
    1,   0,   0.9, 00, 0,     0, 10,
    3,   0,   0.9, 00, 0.1,   0, 20,
    80,  0,    76, 00, 60,    0, 15,
    0.1, 0, 0.005, 00, 0.001, 0, 0),
  ncol=length(timepoints))

构建这个矩阵时需要注意:在每一个时间点上
1、每一层之间的占比之和不能超过100,例如V1和V7、V5和V6
2、子代的占比之和不能超过亲代,例如第一行中 V2 + V3 + V4 = 92 < 99 = V1

  • clone.labels:标签名称。
  • fix.missing.clones:布尔值,是否需要纠正非零时间点之间出现0的种群数据,默认FALSE。
  • col:颜色向量,可以后续通过setCol进行设置,col=颜色向量。
fish = setCol(fish, col = NULL)

layoutClones

生成将用于绘图的布局关键点。

fish = layoutClones(fish, separate.independent.clones = FALSE)
  • separate.independent.clones:布尔值,控制父节点(parents=0)之间是否需要在画图时用空格分离开。默认FALSE,不分离。

fishPlot

fishPlot(fish, shape = "polygon", 
         border = 0.5, col.border = "#777777", pad.left = 0.2,ramp.angle = 0.5,
         vlines = NULL, col.vline = "#FFFFFF99", vlab = NULL, cex.vlab = 0.7,
         title = NULL, title.btm = NULL, cex.title = NULL,
         bg.type = "gradient", bg.col = c("bisque","darkgoldenrod1", "darkorange3"))

1、图形

  • shape:构建的鱼图形状。
名称示例
polygon在这里插入图片描述
spline在这里插入图片描述
bezier在这里插入图片描述
  • border:该多边形的边框大小。
  • col.border:边框的颜色。
  • pad.left:第一个时间点左侧扩展的幅度,默认为0.2。
  • ramp.angle:shape=‘ploygon’,取值在0-1之间,表示从原点到第一个时间点之间的扩展幅度。

2、划线与标签

  • vlines:数字向量,指示画线的位置。
  • col.vlines:划线的颜色。
  • vlab:划线位置的标签。
  • cex.vlab:标签的缩放大小。

3、标题

  • title:位于上方的标题,在图片外部。
  • title.btm:位于左下方的标题,在图片内部。
  • cex.title:标题的缩放大小。

4、背景

  • bg.type:背景的类型选择,“gradlent” (默认)or “solld”。
  • bg.col:背景的颜色选择,“gradlent” 需要三种颜色选择,"solld"需要一种。

drawLegend

设置图例。

drawLegend(fish, xpos = 0, ypos = -5, nrow = NULL, cex = 1)
  • xpos:x轴坐标,默认0,以左为原点。
  • ypos:y轴坐标,默认-5,以图片下方为原点。
  • nrow:图例的行数。
  • cex:缩放大小。

其他函数

调用方法:

fishplot:::<name>

validateInputs

检查关键的数据是否符合fish结构数据的要求。如果满足要求则不返回任何值。

validateInputs(frac.table, parents, nest.level,
               clone.labels, clone.annots)
  • clone.labels:每一个种群的标签名称
  • clone.annots:注释

fixDisappearingClones

用于修复分次矩阵。其基础理论是:在一个时间点上具有非零值的种群不可能在一秒钟内完全消失,然后在第三个时间点再次出现。那个种群肯定一直都在那里。此函数将“修复”任何此类实例,方法是将中间的零值替换为非常小的值。

frac.table = fixDisappearingClones(frac.table, nest.level)

getInnerSpace

获取一个亚群中只有该亚群且未被亚克隆占据的百分比,即纯占比。

getInnerSpace(clone, fish)
  • clone:需要检查的种群编号。
  • fish:检查的fish对象。

例子:

timepoints=c(0,34,69,187,334,505,530)
parents = c(0,1,1,1,3,4,0)
frac.table = matrix(
  c(99, 30,     2, 60, 0,     2, 1,
    1,   0,   0.1, 00, 0,     0, 1,
    3,   0,   2.5, 00, 0,     0, 1,
    1,   0,   0.9, 00, 0,     0, 10,
    3,   0,   0.9, 00, 0.1,   0, 20,
    80,  0,    76, 00, 60,    0, 15,
    0.1, 0, 0.005, 00, 0.001, 0, 0),
  ncol=7)

fish = createFishObject(frac.table,parents,timepoints=timepoints)

fishplot:::getInnerSpace(3, fish)

<返回值>
     0     34     69    187    334    505    530 
 2.000  0.100  2.500  0.900  0.800 16.000  0.004 

505所对应的值为16,这是因为V3的76中,有60属于它的子类,也就是V5,因此使用该函数查询出的纯占比为16。

getOuterSpace

获取非肿瘤空间,即每个时间点处,100 - 初始父类种群(parents为0)占比之和。

getOuterSpace(fish)
<返回值>
   0   34   69  187  334  505  530 
 0.0 98.0 96.0 89.0 77.0  5.0 99.9 

getNestLevel

查询在当前的亲子代关系中,x位于哪一层。

getNestLevel(parents, x)
  • parents:种群之间的亲子代关系。
  • x:查询的种群。

例子:

parents = c(0,1,1,1,3,4,0)

fishplot:::getNestLevel(parents, 3)
<返回值> 1
fishplot:::getNestLevel(parents, 1)
<返回值> 0
fishplot:::getNestLevel(parents, 6)
<返回值> 2

在这里插入图片描述

getAllNestLevels

获取所有种群的嵌入位置。

fishplot:::getAllNestLevels(parents)
<返回值> 0 1 1 1 2 2 0

annotClone

插入注释。

annotClone(
  x, y, annot,
  angle = 0, col = "black", cex = 0.5,
  pos = 4, offset = 0.5
)
  • x:注释的起始位置x轴,原点在0时间点处
  • y:注释的起始位置y轴,原点在图像最下方
  • annot:注释的内容
  • angle:角度
  • col:颜色
  • pos:整数,表示位置,1=below, 2=left, 3=above, 4=right
  • cex:字体大小
  • offset:从起始位置偏移量

drawClustPolygon、drawClustSpline、drawClustBezler

基于已有的fishplot,绘制单个集群。注意该绘图会覆盖原始的图像,并且并不会将这个集群插入到fish object中,因此我个人并不建议使用这些指令。

drawClustPolygon(xpos, ytop, ybtm, color, nest.level, 
                 pad.left = 0, ramp.angle = 0.5,
                 border = 1, col.border = NULL)
  • xpos:x轴的控制点位置,相当于fishobject中的timepoints。
  • ytop:y轴控制点起始位置。
  • ybtm:y轴控制点结束位置。
    注意:ytop、ybtm长度应与xpos保持一致;ytop-ybtm=每个时间点处的占比。
  • color:颜色。
  • nest.level:描述其嵌套深度的整数 。

createBackgroundImage

创造背景图像。返回值为创建图像的储存路径。

createBackgroundImage(col)
  • col:用于渐变的三种颜色的向量

代码

这里就不贴代码了,可以直接从论文中的附录下载,附录二就是。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值