热图的 R 图像缩放
R Image scaling for heatmap
我目前正在处理 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 在哪个 "room" 中出现的时间最长。
编辑:
如果我这样使用 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。所以它仍然不是我想要的方式。
您需要的是每个轴的比例因子!例如你说 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 轴。我不知道第三个数字是什么...
使用您为每个轴提到的范围,这应该可以解决问题。
我目前正在处理 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 在哪个 "room" 中出现的时间最长。
编辑: 如果我这样使用 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。所以它仍然不是我想要的方式。
您需要的是每个轴的比例因子!例如你说 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 轴。我不知道第三个数字是什么...
使用您为每个轴提到的范围,这应该可以解决问题。