R Масштабирование изображения для карты тепла

В настоящее время я работаю над проблемой с R. Я довольно плохо знаком с R, поэтому у меня нет опыта, по (я полагаю) простой проблеме. У меня проблема с масштабированием изображения по отношению к некоторым имеющимся у меня данным. Изображение является поэтажным планом. Данные у меня записываются вручную.

данные выглядят так: данные

Мой код выглядит так:

theData <-data.frame(EntryNr = c(0001,0002,0003,0004,0005,0006,0007), 
                 TimeSet = c('2017-01-15','2017-01-17','2017-01-18','2017-01-19','2017-01-20','2017-01-21','2017-01-22'),
                 SomeID = c('Mario','Mario','Mario','Luigi','Luigi','Luigi','Bowser'),
                 Room = c('Room1','Room1', 'Room1', 'Room1', 'Room1', 'Room1','Room1'),
                 theX = c(12.011, 11.767, 11.715, 11.827, 11.773,11.846,11.781), 
                 theY = c(6.733, 6.698, 6.871, 6.799, 6.887, 6.327,6.577),
                 theZ = c(3, 2.958, 2.983, 2.981, 2.992,2.952,2.945))

thePicture <- readPNG("FloorPlan.png")

ggimage(thePicture, fullpage = FALSE) +
  geom_point(aes(x = theX, y = theY, colour = SomeID), 
             data = theData, size = I(5), fill = NA) +
  labs(x='X axis', y='Y axis')

и мой сюжет в итоге выглядит так (фоновое изображение - простой план этажа): изображение на графике из RStudio

Итак, моя проблема сейчас в том, что оси X и Y имеют действительно высокие масштабы. Y превышает 600, а X превышает 400. Но согласно данным, точки должны быть видны на графике в "Room1" (внизу справа), а не внизу слева.

Есть ли способ изменить масштаб изображения?

Что-то вроде:

Ось Х масштабируется от 0 до 15

Ось Y масштабируется от 0 до 25

общая цель этого - построить тепловые карты на основе гораздо большего количества данных, которые у меня есть, и показать, какой идентификатор находился в какой "комнате" в течение большей части времени.

РЕДАКТИРОВАТЬ: если я использую ggimage, как это:

ggimage(thePicture, fullpage = FALSE, scale_axes = TRUE) +
  geom_point(aes(x = theX, y = theY,  colour = SomeID), 
             data = theData, size = I(5), fill = NA) +
  labs(x='X axis', y='Y axis') 

scale_axes = TRUE, все мое изображение сжимается до нижнего левого угла, а масштаб изменяется от X = 0 до 12, Y = от 0 до 7. Так что все равно не так, как я хочу.

1 ответ

Решение

Что вам нужно, это коэффициент масштабирования для каждой оси! Например, вы сказали, что ось X находится в диапазоне от 0 до 15, а ось Y от 0 до 25, результат будет выглядеть следующим образом...

library(png)
library(ggmap)

thePicture <- readPNG('~/Desktop/Screen Shot 2016-12-01 at 13.03.23.png')
y_factor <- dim(thePicture)[1] / 25
x_factor <- dim(thePicture)[2] / 15

theData <-data.frame(EntryNr = c(0001,0002,0003,0004,0005,0006,0007), 
                     TimeSet = c('2017-01-15','2017-01-17','2017-01-18','2017-01-19','2017-01-20','2017-01-21','2017-01-22'),
                     SomeID = c('Mario','Mario','Mario','Luigi','Luigi','Luigi','Bowser'),
                     Room = c('Room1','Room1', 'Room1', 'Room1', 'Room1', 'Room1','Room1'),
                     theX = c(12.011, 11.767, 11.715, 11.827, 11.773,11.846,11.781), 
                     theY = c(6.733, 6.698, 6.871, 6.799, 6.887, 6.327,6.577),
                     theZ = c(3, 2.958, 2.983, 2.981, 2.992,2.952,2.945))

ggimage(thePicture, fullpage = FALSE) +
  geom_point(aes(x = theX * x_factor , y = theY * y_factor, colour = SomeID), 
             data = theData, size = I(5), fill = NA) +
  labs(x='X axis', y='Y axis')

Просто используйте dim чтобы получить размеры вашего PNG изображения. Первое число - это ось y, второе - ось x. Я не знаю, что такое третье число... Используйте диапазоны, которые вы упомянули для каждой оси, и это должно сработать.

Другие вопросы по тегам