Рассматривая следующий пример. Исходя из вашего кода, удаление 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"))
Однако другой вариант может заключаться в построении графика с использованием функций 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 = "")
Отвечает ли он на ваш вопрос?