#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