如何3D绘制R中不平方的矩阵?

时间:2016-10-12 16:53:55

标签: r matrix plot heatmap kernel-density

我想使用我自己的数学函数而不是核密度估计来绘制热图。但目前我的问题来自这样一个事实,即如果我的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

我根据图像尺寸创建了两个向量(即e2e1)。因此,e2长855个细胞,E1长670个细胞。然后我使用上面的函数来创建两个矩阵(即E2e1 <- 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)))

1 个答案:

答案 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)