我想使用我自己的数学函数而不是核密度估计来绘制热图。但目前我的问题来自这样一个事实,即如果我的persp()
和我x
并且我无法使用y
来绘制此函数。 rep.row <- function(x, n){
matrix(rep(x, each = n), nrow = n)
}
rep.col <- function(x, n){
matrix(rep(x, each = n), ncol = n, byrow = TRUE)
}
轴不是平方的。实际上,热图的大小为855 x 670。
1)有没有办法解决这个问题?
2)另外,有人知道如何将其变成热图吗?
提前致谢。请在下面找到我的脚本的一部分。
----------------------------------------------- --------------------------------
以下是我们需要的两个功能:
require('png')
png <- readPNG("myImage.png")
res <- dim(png)[2:1]
这会读取图像并提取其尺寸(即宽度和长度):
> dim(png)[2:1]
[1] 855 670
有关信息:
alphaW <- 53
alphaH <- 31
a <- 2.3
这些是固定参数:
e1
我根据图像尺寸创建了两个向量(即e2
和e1
)。因此,e2
长855个细胞,E1
长670个细胞。然后我使用上面的函数来创建两个矩阵(即E2
和e1 <- seq(-alphaW, alphaW, length = res[1])
e2 <- seq(-alphaH, alphaH, length = res[2])
E1 <- rep.row(e1, res[2])
E2 <- rep.col(e2, res[1])
)相同大小的图像(即855 x 670)。
SV
这两个矩阵的计算用于创建第三个矩阵SV <- sqrt((a / (a + ((E1^2) + (E2^2)))))
:
persp(x = e1, y = e2, z = SV,
col = "lightgoldenrod",
border = NA,
theta = 30,
phi = 15,
ticktype = "detailed",
ltheta = -120,
shade = 0.25)
最后,我想绘制这个矩阵的3D表示:
Error in persp.default(e1, e2, SV, col = "lightgoldenrod", border = NA, :
argument 'z' incorrect
这应输出类似{this}的内容,但是,我会收到:
args <- commandArgs()
print(paste0("args:", args))
print(paste0("args[1]:",args[1]))
print(paste0("args[2]:",args[2]))
print(paste0("args[3]:",args[3]))
print(paste0("# of args:",length(args)))
答案 0 :(得分:1)
你换了x和y。如果查看persp()的帮助页面,您会注意到x的长度为nrow(z),y长度为ncol(z)。因此,虽然直观地说你可能期望行在垂直轴上(你如何可视化矩阵),但它似乎是另一种方式。
这有效:
persp(y = e1, x = e2, z = SV,
col = "lightgoldenrod",
border = NA,
theta = 30,
phi = 15,
ticktype = "detailed",
ltheta = -120,
shade = 0.25)