Как построить таблицу данных 0 и 1 как двухцветную сетку в R? - PullRequest
1 голос
/ 27 апреля 2020

У меня есть несколько файлов, подобных приведенному ниже. Каждая из них содержит 26 строк, которые состоят из названия образца и числа 0 и 1.

mem/Bur_05_sorted.bam_A 0   0   0   0   0   1   1   0   0   1   1   0   0   0   1   1   1   1   1   1   1   1
mem/Bur_05_sorted.bam_B 1   1   1   1   1   1   1   1   1   1   1   1   1   0   0   0   0   0   0   0   0   0
mem/Ell_06_sorted.bam_A 1   1   0   0   0   1   1   1   1   1   1   1   1   1   0   0   0   0   0   0   0   0
mem/Ell_06_sorted.bam_B 0   0   0   0   0   1   1   1   1   1   1   1   1   0   1   1   0   0   0   0   0   0
mem/Ell_07_sorted.bam_A 0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
mem/Ell_07_sorted.bam_B 1   1   1   1   1   0   0   0   0   0   0   0   0   1   0   0   0   0   0   0   0   0
mem/Ste_01_sorted.bam_A 0   0   0   0   0   0   0   0   0   1   1   1   1   1   1   1   1   0   0   0   0   0
mem/Ste_01_sorted.bam_B 0   0   0   0   0   1   1   1   1   1   1   1   1   1   1   1   0   0   0   0   0   0
mem/Sto_02_sorted.bam_A 0   0   0   0   0   0   0   0   0   1   1   1   1   0   1   1   1   1   1   1   1   1
mem/Sto_02_sorted.bam_B 1   1   1   1   1   1   1   1   1   0   0   0   0   0   0   0   0   0   0   0   0   0
mem/Sto_03_sorted.bam_A 1   1   0   0   0   0   0   0   0   0   0   0   0   0   1   1   1   0   0   0   0   0
mem/Sto_03_sorted.bam_B 0   0   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   0   0
mem/Sto_07_sorted.bam_A 0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
mem/Sto_07_sorted.bam_B 0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
mem/Vog_01_sorted.bam_A 1   1   1   1   1   1   1   1   1   0   0   0   0   0   0   0   0   0   0   0   0   0
mem/Vog_01_sorted.bam_B 0   0   0   0   0   1   1   1   1   1   1   1   1   1   0   0   0   0   0   0   0   0
mem/Vog_02_sorted.bam_A 0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
mem/Vog_02_sorted.bam_B 0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
mem/Vog_03_sorted.bam_A 0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
mem/Vog_03_sorted.bam_B 0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
mem/Vog_04_sorted.bam_A 0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
mem/Vog_04_sorted.bam_B 0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
mem/Vog_05_sorted.bam_A 1   1   1   1   1   0   0   0   0   0   0   1   1   1   1   0   0   0   0   0   0   0
mem/Vog_05_sorted.bam_B 0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   0   0   0   0   0   1
mem/Vog_06_sorted.bam_A 1   1   0   0   0   0   0   1   1   1   1   1   1   0   0   0   0   0   0   0   0   0
mem/Vog_06_sorted.bam_B 1   1   1   1   1   0   0   0   0   0   0   0   0   1   1   1   0   0   0   0   0   0

Линии представляют последовательности генома индивидуума смешанного происхождения. Каждое число представляет ячейку длиной 0,01 мегабазы, значение обозначает происхождение сегментированного сегмента. Я хотел бы использовать этот файл для создания сетчатого графика в двух цветах (например, 0 - красным, а 1 - синим), где по оси Y показаны названия образцов. Сюжет вроде this .

У меня нет опыта работы с R, но мое первоначальное предположение было прочитать таблицу в виде матрицы:

data <- as.matrix(read.table("L_1616.vit.txt"), rownames = 1)

И затем использовать изображение () для построения. Но я не могу понять, что предоставить в качестве аргументов для этой команды. Кто-нибудь, кто может объяснить, как это сделать? Является ли image () правильным способом?

Спасибо!

1 Ответ

0 голосов
/ 27 апреля 2020

Рассматривая следующий пример. Исходя из вашего кода, удаление as.matrix при загрузке набора данных должно позволить вам получить подобную структуру)

df <- data.frame(row.names = LETTERS[1:20],
                 col1 = sample(c(0,1),20, replace = TRUE),
                 col2 = sample(c(0,1),20, replace = TRUE),
                 col3 = sample(c(0,1),20, replace = TRUE))  

> head(df)
  col1 col2 col3
A    0    1    0
B    1    1    1
C    1    0    0
D    0    1    0
E    0    1    0
F    0    0    1 

Используя image, вы можете сделать:

image(as.matrix(df), col = c("red","blue"))

enter image description here

Однако другой вариант может заключаться в построении графика с использованием функций ggplot2 и geom_tile.

Вы можете перевести фрейм данных в более длинный формат, используя pivot_longer и получить следующий набор данных:

library(tidyr)
library(dplyr)

df %>% mutate(Row = rownames(df)) %>%
  pivot_longer(-Row)

# A tibble: 60 x 3
   Row   name  value
   <chr> <chr> <dbl>
 1 A     col1      0
 2 A     col2      1
 3 A     col3      0
 4 B     col1      1
 5 B     col2      1
 6 B     col3      1
 7 C     col1      1
 8 C     col2      0
 9 C     col3      0
10 D     col1      0
# … with 50 more rows

В дополнение к предыдущему коду вы можете передать следующий код, чтобы получить сюжет:

library(tidyr)
library(dplyr)
library(ggplot2)

df %>% mutate(Row = rownames(df)) %>%
  pivot_longer(-Row) %>%
  ggplot(aes(x = Row, y = reorder(name, desc(name)), fill = as.factor(value)))+
  geom_tile()+
  scale_fill_manual(name = "Code", values = c("red","blue"))+
  labs(y = "")

enter image description here

Отвечает ли он на ваш вопрос?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...