R热图的图像缩放

时间:2017-02-07 15:37:57

标签: r heatmap image-scaling ggimage

我目前正在研究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

这个目的的总体目标是从我拥有的更多数据中绘制热图,并在最长时间内显示哪个ID在哪个“房间”。

修改 如果我像这样使用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 个答案:

答案 0 :(得分:0)

您需要的是每个轴的缩放系数!例如,你说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轴。我不知道第三个数字是什么...... 使用您为每个轴提到的范围,这应该可以解决问题。