カーネル密度推定の代わりに私自身の数学関数を使ってヒートマップをプロットしたいと思います。しかし、現時点では、私の問題は、x
& y
の軸が2乗されていない場合、persp()
を使用してこの関数を3Dプロットできないという事実から来ています。実際、ヒートマップのサイズは855 x 670です。Rで二乗されていない3Dプロット行列をどのようにするのですか?
1)この問題を解決する方法はありますか?
2)また、これをヒートマップにする方法を知っていますか?
ありがとうございます。下のスクリプトの一部を見つけてください。
---------------------------------------------- ---------------------------------ここ
は、私たちが必要とする二つの機能は以下のとおりです。
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)
}
これは画像を読み取り、その寸法(すなわち、幅及び長さ)を抽出:
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
Iは、画像の大きさに基づいて、2つのベクトル(すなわち、e1
とe2
)を作成します。したがって、e1
は855セルの長さであり、e2
は670セルの長さです。次に、画像の同じサイズ(すなわち、855×670)の2つのマトリクス(すなわち、E1
および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])
、SV
:
SV <- sqrt((a/(a + ((E1^2) + (E2^2)))))
最後に、私はこの行列の3D表現をプロットしたい:
persp(x = e1, y = e2, z = SV,
col = "lightgoldenrod",
border = NA,
theta = 30,
phi = 15,
ticktype = "detailed",
ltheta = -120,
shade = 0.25)
この{this}のように出力する必要があります。
Error in persp.default(e1, e2, SV, col = "lightgoldenrod", border = NA, :
argument 'z' incorrect
あなたは[再現可能な例]を提供する場合それは助けるために簡単です(http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-再現可能な例)、私たちはアクセス権のない画像ファイルを必要としません。 – MrFlick
すべての.pngファイルは実際には正常だったはずです。しかし、コピー/貼り付けや計算だけでは問題がないという事実から、問題点を完全に理解しています。私の悪い。私の問題は解決されます。あなたの時間をありがとう。 –