Как построить изображение png в ggplot2? - PullRequest
2 голосов
/ 06 мая 2020

Изображение не отображается должным образом, оно повернуто на 90 градусов влево.

library("png")
library("ggplot2")

download.file("https://upload.wikimedia.org/wikipedia/commons/7/70/Example.png",
              "wiki.png", mode = 'wb')
img = readPNG("wiki.png")

grd = expand.grid(1:178, 1:172)
dim(img) = c(178 * 172, 3)
img = as.data.frame(img)
img = cbind(grd, img)
colnames(img) = c("X", "Y", "R", "G", "B")
img$RGB = rgb(img$R, img$G, img$B)

ggplot(img, aes(x = X, y = Y, fill = RGB)) +
  geom_raster() +
  scale_fill_identity()

Ответы [ 2 ]

3 голосов
/ 06 мая 2020

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

ggplot по умолчанию для построения данных в декартовых координатах, где, если ваш график имеет все положительные значения, «начало» (начало координат) - это нижний левый угол, а типичный порядок измерений - (x, y).

Это очень разные системы, поэтому вам нужно будет выполнять перевод между ними, чтобы использовать этот подход: aes(x = Y, y = -X, fill = RGB) - хотя, чтобы было понятнее, вы можете выбрать другие имена, чем X и Y для координат вашего изображения.

2 голосов
/ 06 мая 2020

Это стандартная проблема с условными обозначениями построения графиков и условными обозначениями изображений.

Как насчет

ggplot(img, aes(x = Y, y = X, fill = RGB)) + 
      geom_raster() + scale_fill_identity() +   scale_y_reverse()

?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...