空转旋转 seurat spatial rotate 图片 翻转 数据结构 对象 seurat的空转数据存储

news2024/9/24 3:21:20

 1seurat 取子集操作

3. 对象操作
① 通过结构图上的@,$符号依次取
② 两个中括号操作,pbmc[[ ]]。
教程中,pbmc[['percent.MT']]向meta.data添加 percent.MT 这一列。
pbmc[[]],中括号取的是上面结构图中的二级数据名称

以上两种方法的区别是?
如果取的一级结构Assays的下属内容:

无差别

 > class(pbmc[['RNA']])
 [1] "Assay"
 attr(,"package")
 [1] "Seurat"
 > class(pbmc@assays$RNA)
 [1] "Assay"
 attr(,"package")
 [1] "Seurat"
如果是一级结构meta.data里的下属内容:

返回的数据类型不同

> class(pbmc[['nCount_RNA']])
[1] "data.frame"
> class(pbmc@meta.data$nCount_RNA)
[1] "numeric"
pbmc[['nCount_RNA']] 取出来,是所有细胞的nCount_RNA,包含细胞信息,数据框
image.png

而pbmc@meta.data$nCount_RNA取出来的是单独nCount_RNA一列,是向量
image.png
如果取的一级结构里reductions的下属内容:

无差别


> class(pbmc[['pca']])
 [1] "DimReduc"
 attr(,"package")
 [1] "Seurat"
> class(pbmc@reductions$pca)
 [1] "DimReduc"
 attr(,"package")
 [1] "Seurat"

作者:森尼啊
链接:https://www.jianshu.com/p/0c4bc6a932b2
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

1.4  Seurat 流程第一步就是创建 Seurat 对象,首先要明白 Seurat 对象的构成。Seurat 对象进一步细分为: Assay Object 对象 和 DimReduc Object 对象。

Assay Object 对象存放的多组学的表达数据, DimReduc Object 对象存放的是对 Assay Object 对象进行降维分析后的结果。

Seurat对象数据结构 - 简书

5.2 assay
一个Seurat对象可以包括多个assay对象,但是在某个时刻,只有一个assay对象是默认激活的。可以通过函数 active.assay 查询当前默认激活的是哪个assay对象。也可以用 DefaultAssay 来设置默认的 assay。

5.3 ident Seurat对象数据结构 - 简书1、标准流程里面的过滤三步骤,也可以用 SCTransform 代替 Seurat基本教程[Seurat%E5%9F%BA%E6%9C%AC%E6%95%99%E7%A8%8...icon-default.png?t=N7T8https://www.jianshu.com/p/238976158dcc
可以理解为细胞的类型,在Seurat对象中,细胞可能有好几种不同方法注释的类型,但是在某一时刻,只有一种细胞类型是默认激活的。可以用active.ident来查询当前默认的细胞类型是什么。

5.4 reduction
和assay一样,reduction返回的也是一个列表。里面包含的是一个或多个 DimReduc object 对象。 每个DimReduc object 对象对应的是 assay 对象进行某种降维分析后得到的结果。降维也就是PCA 、tsen 、umap 三种。 下面这个例子里面的列表中,有两个DimReduc object 对象,分别是PCA 和umap

1.5 key : 每个active对象都有一个key值,可以用fetch函数来获取

 

2 anndata数据结构

anndata

单细胞转录组的核心就是一个cell X gene的二维表,但是分群后要存储cell的分群结果,特征选择是要记录gene的信息,降维后要存储降维后的结果。所以,这张表.X的对象cell相关的信息记录在.obs中,属性gene的信息记录在.var中,其他的信息在.uns中。

记得初中时学习立体几何老师要求我们要有空间想象力,把思维提高到一个新的维度。在单细胞数据分析的过中,我们也要挑起我们的想象力,比如在RNA速率的分析中,anndata存储的内容是这样的:

adata

AnnData object with n_obs × n_vars = 7292 × 1999 
    obs: 'initial_size_unspliced', 'initial_size_spliced', 'initial_size', 'n_counts', 'velocity_self_transition', 'leiden', 'velocity_clusters'
    var: 'Accession', 'Chromosome', 'End', 'Start', 'Strand', 'means', 'dispersions', 'dispersions_norm', 'velocity_gamma', 'velocity_r2', 'velocity_genes', 'velocity_score', 'fit_alpha', 'fit_beta', 'fit_gamma', 'fit_t_', 'fit_scaling', 'fit_std_u', 'fit_std_s', 'fit_likelihood', 'fit_u0', 'fit_s0', 'fit_pval_steady', 'fit_steady_u', 'fit_steady_s', 'fit_alignment_scaling', 'fit_r2'
    uns: 'pca', 'neighbors', 'connectivities_key', 'distances_key', 'velocity_settings', 'velocity_graph', 'velocity_graph_neg', 'leiden', 'umap', 'leiden_colors', 'rank_velocity_genes', 'recover_dynamics'
    obsm: 'X_pca', 'X_umap', 'velocity_umap'
    varm: 'PCs', 'loss'
    layers: 'matrix', 'ambiguous', 'spliced', 'unspliced', 'Ms', 'Mu', 'velocity', 'variance_velocity', 'fit_t', 'fit_tau', 'fit_tau_', 'velocity_u'
    obsp: 'distances', 'connectivities'

我们不仅要知道每一部分存储的内容,还要知道各部分之间的关系。


链接:https://www.jianshu.com/p/13142bf51e81
 

3

3  空转数据翻转 seurat的空转数据存储


#自建函数 翻转----------
#https://github.com/satijalab/seurat/issues/2702
{
  
  # flip_angle %in% c(180, "R90", "L90", "Hf", "Vf")
  
  rotimat=function(foo,rotation){
    if(!is.matrix(foo)){
      cat("Input is not a matrix")
      return(foo)
    }
    if(!(rotation %in% c("180","Hf","Vf", "R90", "L90"))){
      cat("Rotation should be either L90, R90, 180, Hf or Vf\n")
      return(foo)
    }
    if(rotation == "180"){
      foo <- foo %>% 
        .[, dim(.)[2]:1] %>%
        .[dim(.)[1]:1, ]
    }
    if(rotation == "Hf"){
      foo <- foo %>%
        .[, dim(.)[2]:1]
    }
    
    if(rotation == "Vf"){
      foo <- foo %>%
        .[dim(.)[1]:1, ]
    }
    if(rotation == "L90"){
      foo = t(foo)
      foo <- foo %>%
        .[dim(.)[1]:1, ]
    }
    if(rotation == "R90"){
      foo = t(foo)
      foo <- foo %>%
        .[, dim(.)[2]:1]
    }
    return(foo)
  }
  
  rotateSeuratImage = function(seuratVisumObject, slide = "slice1", rotation="Vf"){
    if(!(rotation %in% c("180","Hf","Vf", "L90", "R90"))){
      cat("Rotation should be either 180, L90, R90, Hf or Vf\n")
      return(NULL)
    }else{
      seurat.visium = seuratVisumObject
      ori.array = (seurat.visium@images)[[slide]]@image
      img.dim = dim(ori.array)[1:2]/(seurat.visium@images)[[slide]]@scale.factors$lowres
      new.mx <- c()  
      # transform the image array
      for (rgb_idx in 1:3){
        each.mx <- ori.array[,,rgb_idx]
        each.mx.trans <- rotimat(each.mx, rotation)
        new.mx <- c(new.mx, list(each.mx.trans))
      }
      
      # construct new rgb image array
      new.X.dim <- dim(each.mx.trans)[1]
      new.Y.dim <- dim(each.mx.trans)[2]
      new.array <- array(c(new.mx[[1]],
                           new.mx[[2]],
                           new.mx[[3]]), 
                         dim = c(new.X.dim, new.Y.dim, 3))
      
      #swap old image with new image
      seurat.visium@images[[slide]]@image <- new.array
      
      ## step4: change the tissue pixel-spot index
      img.index <- (seurat.visium@images)[[slide]]@coordinates
      
      #swap index
      if(rotation == "Hf"){
        seurat.visium@images[[slide]]@coordinates$imagecol <- img.dim[2]-img.index$imagecol
      }
      
      if(rotation == "Vf"){
        seurat.visium@images[[slide]]@coordinates$imagerow <- img.dim[1]-img.index$imagerow
      }
      
      if(rotation == "180"){
        seurat.visium@images[[slide]]@coordinates$imagerow <- img.dim[1]-img.index$imagerow
        seurat.visium@images[[slide]]@coordinates$imagecol <- img.dim[2]-img.index$imagecol
      }
      
      if(rotation == "L90"){
        seurat.visium@images[[slide]]@coordinates$imagerow <- img.dim[2]-img.index$imagecol
        seurat.visium@images[[slide]]@coordinates$imagecol <- img.index$imagerow
      }
      
      if(rotation == "R90"){
        seurat.visium@images[[slide]]@coordinates$imagerow <- img.index$imagecol
        seurat.visium@images[[slide]]@coordinates$imagecol <- img.dim[1]-img.index$imagerow
      }
      
      return(seurat.visium)
    }  
  }
  
  
}
{
  d.all=rotateSeuratImage(d.all,rotation = "L90", slide = "SiO2_56")
  SpatialDimPlot(d.all, images = "SiO2_56",pt.size.factor = 1,label = TRUE)
  
  d.all=rotateSeuratImage(d.all,rotation = "L90", slide = "NS_7")
  SpatialDimPlot(d.all, images = "NS_7",pt.size.factor = 1,label = TRUE)
  
  
  d.all=rotateSeuratImage(d.all,rotation = "L90", slide = "SiO2_7")
  SpatialDimPlot(d.all, images = "SiO2_7",pt.size.factor = 1,label = TRUE,repel = TRUE)
  
  
  SpatialDimPlot(d.all,  repel = TRUE,
                 ncol = 2,images = c("NS_7" ,"SiO2_7","NS_56","SiO2_56"),
                 pt.size.factor = 1,label = TRUE,
                 label.size = 2)
  
  SpatialDimPlot(d.all, # repel = TRUE,
                 ncol = 2,images = c("NS_7" ,"SiO2_7","NS_56","SiO2_56"),
                 pt.size.factor = 1,label = TRUE,
                 label.size = 2)
  
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1079653.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《Unity Shader入门精要》笔记06

基础纹理 单张纹理纹理的属性Alpha SourceWrap ModeFilter Mode 凹凸映射高度纹理法线纹理实践在切线空间下计算在世界空间下计算 Unity中的法线纹理类型Create from Grayscale 渐变纹理遮罩纹理其他遮罩处理 单张纹理 我们通常会使用一张纹理来代替物体的漫反射颜色 Shader …

[SRT]1.协议简介

1.简介 ​ 安全可靠传输协议(Secure Reliable Transport)简称SRT&#xff0c;是一种基于UDT协议的开源互联网传输协议&#xff0c;Haivision和Wowza合作成立SRT联盟&#xff0c;管理和支持SRT协议开源应用的组织&#xff0c;这个组织致力于促进视频流解决方案的互通性&a…

041:mapboxGL移动到到某Layer上,更换鼠标形状

第041个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中通过鼠标hover的方式来更换鼠标形状。 通过mouseenter和mouseleave的方法,经过某个图层上的时候,更换鼠标的形状,从default到pointer。 离开后从pointer到default。 直接复制下面的 vue+mapbox源代码,操…

安信证券携手共议量化行业的赋能发展

9月22日&#xff0c;安信证券上海浦西分公司携手非凸科技、通联数据在上海共同开展“量化私募闭门交流会”&#xff0c;与资方管理人就如何赋能量化私募可持续发展&#xff0c;给出了精彩纷呈的见解与讨论。 安信证券以“打造数字化券商”为目标&#xff0c;加强科技创新与业务…

数据库常见面试题--MySQL

梳理面试过程中数据库相关的常见问题&#xff0c;需要说明的是&#xff0c;这篇文章主要是基于MySQL数据库&#xff0c;其他类型的数据库还请自行参考使用。 数据库概述 为什么使用数据库 1、数据库增删改查更方便 2、提供了事务的能力 本质是更好的管理数据。 数据库体系结…

Android rtmp 低延迟直播方案:简介

Android rtmp 低延迟直播方案:简介 Android RTMP 低延迟直播方案:使用 RTMP 推送至 ZLMediaKit,通过 WebRTC 进行拉流。

会展购票系统有哪些特点?如何选择好的会展购票系统开发公司

会展购票系统是会展行业的重要组成部分&#xff0c;它具有提高会展业务流程运转效率、业务操作方便快捷、降低人工成本等优势。如开利网络自主研发的会展购票系统就有以下几个特点&#xff1a; 1. 拥有多端开发能力。除了电脑端外&#xff0c;还可以开发微信小程序端、公众号端…

不说废话,推荐一款超实用免费配音软件~

短视频发展如火如荼&#xff0c;在制作编辑视频的同时&#xff0c;文字转语音的需求也越来越大&#xff0c;例如解说配音、旁白配音、vlog配音等&#xff0c;今天就给大家推荐一款超实用的免费配音软件&#xff0c;感兴趣的小伙伴请接着往下看&#xff01; 一、悦音AI配音&…

语音芯片的“等级”之分

语音芯片&#xff0c;你或许不晓得这个“芯”也是有高低之分&#xff0c;你可能听说过手机“发烧级”高性能芯片&#xff0c;同样在语音芯片中存在着性能不同等级的语音芯片。一般我们将普通芯片主要分为3个等级&#xff1a;商业级&#xff08;又称民用级&#xff09;、工业级和…

在Scrum敏捷开发中,开发人员(Developers)的职责

在Scrum敏捷开发中&#xff0c;开发人员&#xff08;Developers&#xff09;是Scrum团队中最重要的角色之一&#xff0c;负责产品的开发和交付&#xff0c;其重要性不言而喻。 那开发人员的职责和需要参加的活动是什么呢&#xff1f; Developers核心职责&#xff1a; 承诺并完…

【外汇天眼】不工作只做交易?探索不平凡的生活

金融界曾有一句广为流传的名言——"富人做债券&#xff0c;中产做股票&#xff0c;穷人做期货外汇"。这并非因为穷人特别热爱期货和外汇交易&#xff0c;而是因为他们更渴望通过杠杆交易在短期内实现财富梦想。如果一个人不愿意或没有技能去工作&#xff0c;但精通交…

Lambda 表达式使用详解,一篇文章手把手教会你

目录 1. Lambda 表达式有什么用&#xff1f; 2. 匿名内部类举例 3. Lambda 表达式的标准格式与使用 4. Lambda 表达式使用注意点 5. 什么是函数式接口&#xff1f; 6. Lambda 表达式的省略写法 7. Lambda 表达式省略写法简单展示 1. Lambda 表达式有什么用&#xff1f; …

LeetCode【394】字符串解码

题目&#xff1a; 思路&#xff1a; 参考&#xff1a;https://blog.csdn.net/xushiyu1996818/article/details/107973300 代码&#xff1a; public String decodeString(String s){Deque<Character> stack new ArrayDeque<>();for(char c :s.toCharArray()){if…

第一章:Android开发技能入门指南

Android 从入门到出门第一章&#xff1a;Android开发技能入门指南第二章&#xff1a;使用声明式UI创建屏幕并探索组合原则第三章&#xff1a;使用Hilt处理Jetpack Compose UI状态第四章&#xff1a;现代Android开发中的导航第五章&#xff1a;使用DataStore存储数据和测试第六章…

软考之系统架构师-01什么是系统架构师?什么是系统架构?

第一章 绪论 1. 什么是系统架构师&#xff1f; 系统架构设计师(System Architecture Designer&#xff09;是项目开发活动中的关键角色之一。系统架构是系统的一种整体的高层次的结构表示&#xff0c;是系统的骨架和根基&#xff0c;其决定了系统的健壮性和生命周期的长短。 …

系统架构师--面向对象选择题

系统架构师--面向对象选择题 面向对象考题&#xff08;将设计模式删减了&#xff0c;主要考察uml&#xff09;

IDEA使用模板创建webapp时,web.xml文件版本过低的一种解决方法

创建完成后的web.xml 文件&#xff0c;版本太低 <!DOCTYPE web-app PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""http://java.sun.com/dtd/web-app_2_3.dtd" ><web-app><display-name>Archetype Created Web Appl…

关于优先队列的一点细节

在使用优先队列PriorityQueue时&#xff0c;默认的是升序排列&#xff0c;自己可以指定比较器改为降序排列&#xff0c;例如Collections.reverseOrder()等。 但是在我做力扣的过程中&#xff0c;简单的用一个list的addAll方法添加了优先队列里边所有元素&#xff0c;结果发现添…

浅谈智能照明控制系统在地铁照明中的应用

摘要&#xff1a;随着我国经济建设的加速发展&#xff0c;城市轨道交通越来越获得社会的青睐。车站照明关系到轨道交通的服务质量、运营成本、运营成本等多个方面&#xff0c;在既要保证运营成本又要满足国家“节能”要求的背景下&#xff0c;智能照明控制系统应运而生。 轨道…

uniapp:幸运大转盘demo

<template><view class"index"><image src"../../static/img/158.png" mode"" class"banner"></image><view class"title">绿色积分加倍卡拿到手软</view><almost-lottery :lottery…