如何在R中把0和1的数据表绘制成双色网格?

我有一些像下面这样的文件。每个文件都包含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

这些行代表一个祖先为admixed的个体的基因组序列。每个数字代表一个长度为0.01兆字节的bin,其值表示该bin段的祖先。我想用这个文件制作一个两种颜色的网格状图(例如红色的0和蓝色的1),其中y轴显示样本名称。一个类似于 这个.

我在R方面没有经验,但我最初的猜测是把表格读成一个矩阵。

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

然后用image()来绘制. 但我不太明白该为这个命令提供什么参数.有谁能解释一下怎么做?image()是正确的方法吗?

谢谢!我有一些像下面这样的文件。

解决方案:

考虑到下面的例子。基于 ,根据你的代码,去掉 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

然而,另一个选择可能是做一个情节,使用。ggplot2geom_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

它是否回答了你的问题?

给TA打赏
共{{data.count}}人
人已打赏
未分类

在 neo4J 中导入 json

2022-9-13 13:34:40

未分类

计入x % y ==0的出现次数。

2022-9-13 13:34:42

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索