2017-02-07 4 views
1

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

данных выглядит следующим образом: Data

Мой код выглядит следующим образом:

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') 

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

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

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

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

оси X шкал от 0 до 15

Y оси шкала от 0 до 25

чрезмерной всей цели этого является построить тепловые карты с гораздо больше данных У меня есть и показываю, какой идентификатор был в «комнате» больше всего времени.

EDIT: , если я использую 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. так что это еще не так, как я этого хочу.

+0

Я предполагаю, что он использовал пиксели из png ... возможно, вам нужно использовать коэффициент, чтобы добраться до правильных позиций – drmariod

+0

, как это будет выглядеть? как например? (все еще довольно новый для R). Большое спасибо за подсказку. – BlainTheMono

+0

Как насчет масштабирования ваших 'theX' и' theY' в том же диапазоне, что и размеры вашего изображения? –

ответ

0

Что вам нужно, так это коэффициент масштабирования для каждой оси! Например, вы сказали диапазоны оси х от 0 до 15, а ось у от 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. Я не знаю, что такое третий номер ... Используйте диапазоны, которые вы указали для каждой оси, и это должно сделать трюк.

+0

СПАСИБО ВАС. Это очень помогло мне! – BlainTheMono

Смежные вопросы