R – изображение матрицы пикселей?

Как бы вы сделали изображение из матрицы в R?

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

Сделав изображение, я хочу отобразить его на экране и сохранить его как jpg.

Вы можете легко отобразить его на экране с помощью «изображения»:

m = matrix(runif(100),10,10) par(mar=c(0, 0, 0, 0)) image(m, useRaster=TRUE, axes=FALSE) 

Вы также можете посмотреть растровый пакет …

Настройте график без полей:

 par(mar = rep(0, 4)) 

Изображение матрицы с оттенками серого, как ответ spacedman, но полностью заполняющий устройство:

 m = matrix(runif(100),10,10) image(m, axes = FALSE, col = grey(seq(0, 1, length = 256))) 

Оберните это при вызове png (), чтобы создать файл:

 png("simpleIm.png") par(mar = rep(0, 4)) image(m, axes = FALSE, col = grey(seq(0, 1, length = 256))) dev.off() 

Если вам нужно сделать это с помощью пространственных осей (по умолчанию – [0,1] для X и Y), то используйте image.default(x, y, z, ...) где x и y дают центральные позиции пикселей в z. x и y могут иметь длину dim (z) + 1, чтобы дать угловые координаты для этого соглашения.

Центры пикселей (это значение по умолчанию для изображения):

 x <- seq(0, 1, length = nrow(m)) y <- seq(0, 1, length = ncol(m)) image(x, y, m, col = grey(seq(0, 1, length = 256))) 

Уголки пикселей (нужно 1 дополнительный x и y, а 0 теперь самый нижний левый угол):

 x <- seq(0, 1, length = nrow(m) + 1) y <- seq(0, 1, length = ncol(m) + 1) image(x, y, m, col = grey(seq(0, 1, length = 256))) 

Обратите внимание, что из R 2.13 image.default получает аргумент useRaster который использует очень эффективную новую графическую функцию rasterImage а не старое image которое эффективно выполняет множественные вызовы для rect под капотом, чтобы рисовать каждый пиксель как многоугольник.

Я делаю матрицу (где вертикальная ось увеличивается вниз) одним из двух способов. Ниже приведен первый способ использования heatmap.2 (). Он имеет больший контроль над тем, как числовые значения отформатированы на графике (см. Инструкцию formatC ниже), но немного сложнее справиться при изменении макета.

  library(gplots) #Build the matrix data to look like a correlation matrix x <- matrix(rnorm(64), nrow=8) x <- (x - min(x))/(max(x) - min(x)) #Scale the data to be between 0 and 1 for (i in 1:8) x[i, i] <- 1.0 #Make the diagonal all 1's #Format the data for the plot xval <- formatC(x, format="f", digits=2) pal <- colorRampPalette(c(rgb(0.96,0.96,1), rgb(0.1,0.1,0.9)), space = "rgb") #Plot the matrix x_hm <- heatmap.2(x, Rowv=FALSE, Colv=FALSE, dendrogram="none", main="8 X 8 Matrix Using Heatmap.2", xlab="Columns", ylab="Rows", col=pal, tracecol="#303030", trace="none", cellnote=xval, notecol="black", notecex=0.8, keysize = 1.5, margins=c(5, 5)) 

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

Вы можете создать тепловую карту матрицы.

 library(pheatmap) # Create a 10x10 matrix of random numbers m = matrix(runif(100), 10, 10) # Save output to jpeg jpeg("heatmap.jpg") pheatmap(m, cluster_row = FALSE, cluster_col = FALSE, color=gray.colors(2,start=1,end=0)) dev.off() 

Подробнее см. ?pheatmap .

Попробуйте levelplot:

 library(lattice) levelplot(matrix) 

Вот второй способ (опять же, когда вертикальная ось увеличивается вниз). Этот метод проще компоновки, но имеет меньший контроль над форматом числовых значений, отображаемых на графике.

  library(plotrix) #Build the matrix data to look like a correlation matrix n <- 8 x <- matrix(runif(n*n), nrow=n) xmin <- 0 xmax <- 1 for (i in 1:n) x[i, i] <- 1.0 #Make the diagonal all 1's #Generate the palette for the matrix and the legend. Generate labels for the legend palmat <- color.scale(x, c(1, 0.4), c(1, 0.4), c(0.96, 1)) palleg <- color.gradient(c(1, 0.4), c(1, 0.4), c(0.96, 1), nslices=100) lableg <- c(formatC(xmin, format="f", digits=2), formatC(1*(xmax-xmin)/4, format="f", digits=2), formatC(2*(xmax-xmin)/4, format="f", digits=2), formatC(3*(xmax-xmin)/4, format="f", digits=2), formatC(xmax, format="f", digits=2)) #Set up the plot area and plot the matrix par(mar=c(5, 5, 5, 8)) color2D.matplot(x, cellcolors=palmat, main=paste(n, " X ", n, " Matrix Using Color2D.matplot", sep=""), show.values=2, vcol=rgb(0,0,0), axes=FALSE, vcex=0.7) axis(1, at=seq(1, n, 1)-0.5, labels=seq(1, n, 1), tck=-0.01, padj=-1) #In the axis() statement below, note that the labels are decreasing. This is because #the above color2D.matplot() statement has "axes=FALSE" and a normal axis() #statement was used. axis(2, at=seq(1, n, 1)-0.5, labels=seq(n, 1, -1), tck=-0.01, padj=0.7) #Plot the legend pardat <- par() color.legend(pardat$usr[2]+0.5, 0, pardat$usr[2]+1, pardat$usr[2], paste(" ", lableg, sep=""), palleg, align="rb", gradient="y", cex=0.7) 

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

  • iPhone - Как вы можете покрасить изображение?
  • Как перемещать изображение (анимацию)?
  • Как получить ширину и высоту файла android.widget.ImageView?
  • Написание метаданных изображений на Java, предпочтительно PNG
  • Изменить цвет изображения PNG через CSS?
  • Как рассчитать средние значения цвета rgb растрового изображения
  • Как захватить изображение из пользовательского CameraView в Android?
  • Как изменить изображение от декартовых координат до полярных координат в Matlab?
  • Объект Byte Array to Image
  • Ярлык под изображением в UIButton
  • Формула для определения яркости цвета RGB
  • Interesting Posts

    Программа не ждет ввода пользователя с помощью scanf («% c», & yn);

    Статическая строковая переменная в Objective C на iphone

    Встраивание ресурсов (изображений, звуковых fragmentов и т. Д.) В проект Java, затем использование этих ресурсов

    Как вы создаете словарь на Java?

    Явкие примитивные атомы по конструкции или случайно?

    Можно ли напрямую использовать физический раздел с Windows XP для загрузки виртуальной машины?

    Группировка по значению объекта, подсчет, а затем установка группового ключа с помощью максимального атрибута объекта

    Ссылка рушится?

    Как Windows вычисляет процент фрагментации?

    Ошибка: конфликт с зависимостью «com.google.code.findbugs: jsr305»

    Абсолютное позиционирование Графический JPanel внутри JFrame, заблокированный пустыми разделами

    Что такое исключение NullPointerException и как его исправить?

    как отправить sms программно?

    Понимание использования ColorMatrix и ColorMatrixColorFilter для изменения оттенка Drawable

    Проблема при центрировании по вертикали с помощью flexbox, когда высоты неизвестны

    Давайте будем гением компьютера.