Несколько вентилей для набора потоков с использованием flowViz

#r #bioinformatics #bioconductor

#r #биоинформатика #биопроводник

Вопрос:

Я хочу использовать несколько элементов эллипсоида на flowSet и отобразить результат.

Мне удается построить график flowSet с одним вентилем на кадр, но я не могу правильно сконструировать filtersList объект. Я получаю следующее предупреждение:

Warning messages:
1: 'filter' must either be a filtersList,filterResultList, a single
filter object or a named list of filter objects.
2: 'filter' must either be a filtersList,filterResultList, a single
filter object or a named list of filter objects.

 set.seed(1)
library(flowViz)
# Graphical parameters
flowViz.par.set("gate", list(lwd = 8))
gp <- flowViz.par.get()

# First set of data
data1 <- matrix(c(rnorm(10000), rlnorm(10000)), ncol = 2)
colnames(data1) <- c("M1", "M2")
rownames(data1) <- 1:10000

# Second set of data
data2 <- matrix(c(rnorm(10000), rlnorm(10000)), ncol = 2)
colnames(data2) <- c("M1", "M2")
rownames(data2) <- 1:10000

# Constructing the flowFrames
frame1 <- new("flowFrame", exprs = data1)
frame2 <- new("flowFrame", exprs = data2)

# Gating 
covar1 <- matrix(c(1,0.001,0.001,5), ncol = 2)
colnames(covar1) <- c("M1", "M2")
rownames(covar1) <- c("M1", "M2")
covar2 <- covar1 

means1 <- c(M1 = 0, M2 = 2.5)
means2 <- c(M1 = 0, M2 = 10)

eg1 <- ellipsoidGate(.gate = covar1, mean = means1)
eg2 <- ellipsoidGate(.gate = covar2, mean = means2)

egs <- filters(list(gate1 = eg1, gate2 = eg2))

# Plotting only one flowFrame
xyplot(`M2`~`M1`, frame1, xlab = "M2", ylab = "M1", xlim = c(-4,4), 
ylim = c(0,30), smooth = FALSE, filter = egs)
  

Построение только одного кадра потока

Теперь то же самое для flowSet .

 # Constructing the flowSet
frames <- list(frame1, frame2)
fs <- flowSet(frames)

# Plotting the flowSet
xyplot(`M2`~`M1`|name, fs, xlab = "M2", ylab = "M1", xlim = c(-4,4), 
ylim = c(0,30), 
       panel = function(x,y,...){
         panel.xyplot.flowset(x = x, frames = fs, channel.x.name = "M1",
                              channel.y.name = "M2",gp = gp, 
                              smooth = FALSE,  filter = eg1)
   })
  

Построение набора потоков с одним фильтром

Теперь я хочу сконструировать, filtersList чтобы использовать несколько вентилей для каждого flowFrame из моих flowSet .

 # Constructing the filtersList
myFilters <- filtersList(list(plot1 = egs, plot2 = egs))

xyplot(`M2`~`M1`|name, fs, xlab = "M2", ylab = "M1", xlim = c(-4,4), 
ylim = c(0,30), 
       panel = function(x,y,...){
         panel.xyplot.flowset(x = x, frames = fs, channel.x.name = "M1",
 channel.y.name = "M2", gp = gp, smooth = FALSE,  filter = myFilters)
       })
  

Построение набора потоков

На этом этапе я получаю предупреждение, опубликованное выше. Итак, как мне filtersList правильно сконструировать?

Ответ №1:

Я решил проблему. Вам просто нужно создать filters объект из списка ваших вентилей.

Затем повторите объект, чтобы получить список filters той же длины, что и ваш flowset , и назовите list элементы так же, как ваши flowset элементы.

Но вы можете использовать только элементы управления одного типа, поэтому вы не можете комбинировать rectangleGate и ellipsoidGate объекты.

 # Constructing the filtersList  
myFilters <- filters(list(eg1,eg2))  
myFilters <- rep(list(myFilters),2)  
names(myFilters) <- sampleNames(fs)  

xyplot(`M2`~`M1`|name, fs, xlab = "M2", ylab = "M1", xlim = c(-4,4),  
      ylim = c(0,30),  
      panel = function(x,y,...){  
        panel.xyplot.flowset(x = x, frames = fs, channel.x.name = "M1",  
                             channel.y.name = "M2", gp = gp, smooth = FALSE,  
                             filter = myFilters)  
      })
  

Набор потоков с 2 разными вентилями на панель