web-dev-qa-db-ja.com

Rを使用した等高線マップオーバーレイを使用した3D表面プロットのプロット

Rを使用してプロットする3組のデータセット(X、Y、Zポイント)があります。

データから表面プロットを作成し、表面プロットに等高線マップを重ね合わせて、等高線マップが表面プロットからの「影」または投影であるような印象を作成したいと思います。等高線図は、表面プロットの下に表示されます。

私のデータセットは次のようになります。

Axis  |  Data Type
-------------------
X     |  Date value
Y     |  Float value
Z     |  Float value

どうすればこれを達成できますか?

60

編集:

私はあなたがあなたの次元の1つが日付であると指摘したのを見ました。その場合、 ジェフライアンのchartSeries3dを見てください 3次元時系列をグラフ化するように設計されています。ここで、彼は経時的なイールドカーブを示しています。

chartSeries example

元の回答:

私が理解しているように、3Dサーフェスプロットの下の平面への投影として、countourマップが必要です。 2つのプロットを作成してからそれらを組み合わせる以外に、これを行う簡単な方法があるとは思わない。 これに役立つ空間ビューを見つけてください

3Dプロットには2つの主要なRパッケージがあります:rgl(または関連する misc3d を使用できます=パッケージ)およびscatterplot3d).

rgl

Rglパッケージは、OpenGLを使用してインタラクティブな3Dプロットを作成します( rglのWebサイトで詳細を参照 )。 surface3d関数を使用した例を次に示します。

library(rgl)
data(volcano)
z <- 2 * volcano # Exaggerate the relief
x <- 10 * (1:nrow(z)) # 10 meter spacing (S to N)
y <- 10 * (1:ncol(z)) # 10 meter spacing (E to W)
zlim <- range(z)
zlen <- zlim[2] - zlim[1] + 1
colorlut <- terrain.colors(zlen,alpha=0) # height color lookup table
col <- colorlut[ z-zlim[1]+1 ] # assign colors to heights for each point
open3d()
rgl.surface(x, y, z, color=col, alpha=0.75, back="lines")

Alphaパラメーターは、この表面を部分的に透明にします。これで、サーフェスのインタラクティブな3Dプロットができたので、その下にカントリーマップを作成します。 rglを使用すると、既存の画像にさらにプロットを追加できます。

colorlut <- heat.colors(zlen,alpha=1) # use different colors for the contour map
col <- colorlut[ z-zlim[1]+1 ] 
rgl.surface(x, y, matrix(1, nrow(z), ncol(z)),color=col, back="fill")

このサーフェスでは、もう一方のサーフェスの下に平面があるようにheights = 1を設定します。これは最終的には次のようになり、マウスで回転できます。

3D surface plot

scatterplot3d

scatterplot3dは、Rの他のプロット関数に少し似ています( ビネットを読む )。以下に簡単な例を示します。

temp <- seq(-pi, 0, length = 50)
x <- c(rep(1, 50) %*% t(cos(temp)))
y <- c(cos(temp) %*% t(sin(temp)))
z <- c(sin(temp) %*% t(sin(temp)))
scatterplot3d(x, y, z, highlight.3d=TRUE,
 col.axis="blue", col.grid="lightblue",
 main="scatterplot3d - 2", pch=20)

この場合、画像をオーバーレイする必要があります。 R-Wiki 透明な背景画像の作成に関する素敵な投稿があります

85
Shane