Почему функция image () не работает должным образом?

#r #image

#r #изображение

Вопрос:

У меня большая двоичная матрица (0,1), и я хочу визуализировать ее так, чтобы каждая запись моей матрицы составляла один пиксель на графике. Я использую image() функцию, но она работает не так, как я ожидал. Я ожидал бы, что, поскольку все записи в последней строке равны нулю, я не должен видеть белых пикселей в последней строке изображения.

Вот моя попытка на простом примере с его выводом:

 a <- list(c(0,1,1,0),c(1,1,0,0))
b <- matrix(unlist(a),ncol=2)
> b
     [,1] [,2]
[1,]    0    1
[2,]    1    1
[3,]    1    0
[4,]    0    0
  

введите описание изображения здесь

Комментарии:

1. Попробуйте транспонировать матрицу с t() помощью функции.

2. Я сделал это, но также дал неправильный ответ

3.0 — это значение. Таким образом, он отображается. Используйте NA вместо 0, если вы не хотите image назначать цвет. b <- matrix(c(0,1,1,0,1,1,0,NA), nrow=4, ncol=2) image(1:4, 1:2, b)

4. Мне нужно назначить цвет для 0 и 1, но он назначен неправильно

5. Что вы подразумеваете под «неправильным способом»?

Ответ №1:

Поскольку на image графике отображается вращение входной матрицы против часовой стрелки, вам нужно ее транспонировать, а затем перевернуть, чтобы она отображалась нормально:

 tb <- t(b)
ftb <- tb[ , ncol(tb):1]
  

Теперь вы можете использовать пользовательские цвета, если вам не нравятся цвета по умолчанию, например, 0 — серый, а 1 — красный. Кроме того, использование asp значения, равного единице, делает каждый пиксель изображения прямоугольным (из комментария @koekenbakker ).

 image(x=1:2, y=1:4, ftb, col = c("grey", "red"), asp = 1)
  

введите описание изображения здесь

Ответ №2:

Я не знаю о функции image (), но вы можете сделать это с помощью пакета EBImage, подобного этому.

 a<-list(c(0,1,1,0),c(1,1,0,0))
b<-matrix(unlist(a),ncol=2)
library(EBImage)
x <- as.Image(b)
display(x,method='raster')
  

Комментарии:

1. EBImage недоступен для R версии 3.1

2. попробуйте поискать ее в Google, а затем загрузить через biocLite