1

サーフェスから R の特定の輪郭までのボリュームを見つける必要があります。R ヘルプ ファイルから輪郭の例を取り上げます。

x <- 10*1:nrow(volcano)
y <- 10*1:ncol(volcano)
contour(x,y,volcano)

結果のグラフが与えられた場合、特定の等高線から表面までの体積をどのように見つけるのですか?

実際には、bkde2D を使用して散布図の密度マップを取得します。これから等高線図を作成できますが、結果のプロットでさまざまな密度カットオフによって定義される体積を決定したいと思います。

4

1 に答える 1

1

関数contourは等高線を描画するだけで、値を返しません。使用する必要があるのは functioncontourLinesです。

cL <- contourLines(x,y,volcano)

そこから、次の方法で各等高線の面積を計算できます。

area <- rep(0,length(cL))
for(i in 1:length(cL)){
    d <- data.frame(cL[[i]]$x,cL[[i]]$y)
    sa <- sb <- 0
    for(j in 1:(nrow(d)-1)){
        sa <- sa+d[j,1]*d[j+1,2]
        sb <- sb+d[j,2]*d[j+1,1]
        }
    area[i] <- abs((sa-sb)/2)
    }
area
[1] 1.413924e+05 3.109685e+04 2.431528e+04 2.049473e+04 6.705976e+04 3.202145e+05 1.720469e+03
[8] 2.926802e+05 2.335421e+05 1.834791e+05 1.326162e+05 4.672784e+02 9.419792e+04 5.121851e+03
[15] 5.126860e+04 3.660862e-01 1.216750e+03 2.051307e+04 4.670745e+02 4.146927e+03

ここで、2 つの等高線の間 (レベル 120 と 130 の間など) のボリュームが必要な場合:

level1 <- 120
level2 <- 130
levels <- unlist(lapply(cL,function(x)x$level))
base <- (1:length(cL))[level==level1]
top <- (1:length(cL))[level==level2]
vol <- (level[top]-level[base])*(area[base]+area[top])/2
vol
[1] 2631111

次の等高線がいくつかのセクターに分割されている場合、どのように処理を進めればよいかわかりません。

于 2013-01-25T08:41:19.947 に答える