2016-10-12 3 views
0

カーネル密度推定の代わりに私自身の数学関数を使ってヒートマップをプロットしたいと思います。しかし、現時点では、私の問題は、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つのベクトル(すなわち、e1e2)を作成します。したがって、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 
+0

あなたは[再現可能な例]を提供する場合それは助けるために簡単です(http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-再現可能な例)、私たちはアクセス権のない画像ファイルを必要としません。 – MrFlick

+0

すべての.pngファイルは実際には正常だったはずです。しかし、コピー/貼り付けや計算だけでは問題がないという事実から、問題点を完全に理解しています。私の悪い。私の問題は解決されます。あなたの時間をありがとう。 –

答えて

1

xとyを切り替えました。 persp()のヘルプページを見ると、xは長さnrow(z)と長さncol(z)でなければなりません。したがって、直感的には、行が垂直軸上にあること(行列をどのように視覚化するか)を期待するかもしれませんが、それは別の方法です。

これは動作します:

persp(y = e1, x = e2, z = SV, 
     col = "lightgoldenrod", 
     border = NA, 
     theta = 30, 
     phi = 15, 
     ticktype = "detailed", 
     ltheta = -120, 
     shade = 0.25) 
+0

まあ...それは簡単だった。どうもありがとう! –

関連する問題