3D visualization of gene expression patterns

plot_gene.utf8
rm(list = ls())
library(rgl)
library(misc3d)
library(stringr)
knitr::knit_hooks$set(webgl = hook_webgl)

Plot gene expression

Load gene expression

counts <- read.table("./data/Filtered/filtered_ST_matrix_and_meta_data/filtered_matrix.tsv", sep="\t", header=TRUE, row.names="X")
meta <- read.table("./data/Filtered/filtered_ST_matrix_and_meta_data/meta_data.tsv", sep="\t", header=TRUE)
gene_new <- read.table("genes_new.txt", sep=",", header=TRUE)
counts <- t(counts)
colnames(counts) <- gene_new$x
spots.table <- cbind(rownames(counts), data.frame(counts, row.names=NULL))
colnames(spots.table)[1] <- "X"
loc <- str_split_fixed(spots.table$X, "x", 2)[, 2]
slice <- str_split_fixed(spots.table$X, "x", 2)[, 1]
slice <- gsub("X", "", slice)
slice <- as.numeric(slice)
spots.table$slice <- slice
spots.table$X <- paste0(loc, "-slice", slice-5)
coor_3d <- read.table(paste0("./results_6PCW/3D_coordinates.csv"), sep=",", header=TRUE)
spots.table <- merge(spots.table, coor_3d, by=c("X"))
spots.table <- spots.table[spots.table$slice >= 5 & spots.table$slice <= 13,]

spots.table$x <- -spots.table$x
spots.table$z <- spots.table$z * 2
gene = "FOS"
max = 20 # set maximum value

#open 3D plot window
open3d(windowRect = c(0, 0, 720, 720))
## glX 
##   1
par3d(persp)
## NULL
um <- c(-0.8227578, -0.5278972, 0.2107004, 0,
        -0.5608635, 0.8141541, -0.1502849, 0,
        -0.0922074, -0.2418221, -0.9659296, 0,
        0.0000000, 0.0000000, 0.0000000, 1)
view3d(userMatrix = matrix(um, byrow=TRUE, nrow=4))
  
idx_gene = (spots.table[gene]>0)
  
spheres3d(spots.table[idx_gene,]$x, spots.table[idx_gene,]$y, spots.table[idx_gene,]$z, col = '#7751A8', 
          radius=0.3, alpha=spots.table[idx_gene, gene] / max)
spheres3d(spots.table[!idx_gene,]$x, spots.table[!idx_gene,]$y, spots.table[!idx_gene,]$z, col = "gray", radius=0.3, alpha=0.1)
decorate3d()