web-dev-qa-db-ja.com

R-ggplot-stat_contourは等高線を生成できません

stat_contour()を介してggplot/ggplot2-プロットに等高線を追加しようとしています。残念ながら、ポイント値を評価するための実際のデータを提供することはできません。ただし、別の簡単に再現可能な例は同じように動作します。

testPts <- data.frame(x=rep(seq(7.08, 7.14, by=0.005), 200))
testPts$y <- runif(length(testPts$x), 50.93, 50.96)
testPts$z <- sin(testPts$y * 500)

ggplot(data=testPts, aes(x=x, y=y, z=z)) + geom_point(aes(colour=z))
       + stat_contour()

これにより、次のエラーメッセージが表示されます。

If(nrow(layer_data)== 0)return()のエラー:引数の長さがゼロですさらに:警告メッセージ:等高線データを生成できません

この例は、stackoverflowまたは公式マニュアル/チュートリアルに投稿された他の例と同じように見えます。stat_contourにさらに仕様を提供しても問題はないようです。エラーメッセージのように、関数はデータ(-layer)を渡さないようです。

あなたのアイデアとアドバイスをありがとう!

18

この問題の1つの解決策は、通常のグリッドの生成と、そのグリッドに関するポイント値の補間です。複数のデータフィールドの1つだけに対してこれを行った方法は次のとおりです。

_pts.grid <- interp(as.data.frame(pts)$coords.x1, as.data.frame(pts)$coords.x2, as.data.frame(pts)$GWLEVEL_TI)
pts.grid2 <- expand.grid(x=pts.grid$x, y=pts.grid$y)
pts.grid2$z <- as.vector(pts.grid$z)
_

これにより、stat_contour()のggplotで、その関数のdata-parameterで定義されている場合に使用できるデータフレームが生成されます。

_(ggplot(as.data.frame(pts), aes(x=coords.x1, y=coords.x2, z=GWLEVEL_TI))
#+ geom_tile(data=na.omit(pts.grid2), aes(x=x, y=y, z=z, fill=z))
+ stat_contour(data=na.omit(pts.grid2), binwidth=2, colour="red", aes(x=x, y=y, z=z))
+ geom_point()
)
_

私はまだよくわからないので、このソリューションにはおそらく不必要な変換が含まれています。さらに、単一のデータフレームに再度結合する前に、すべてのデータフィールドに対して同じグリッド生成を個別に行う必要があります。これは、より大きなデータセットの場合ほど効率的ではありません。

7

不規則な間隔のデータでは、stat_density2dの代わりに stat_contour を使用してください。

library(ggplot2)

testPts <- data.frame(x=rep(seq(7.08, 7.14, by=0.005), 200))
testPts$y <- runif(length(testPts$x), 50.93, 50.96)
testPts$z <- sin(testPts$y * 500)

(ggplot(data=testPts, aes(x=x, y=y, z=z))
+ geom_point(aes(colour=z))
+ stat_density2d()
)

enter image description here

8
Andy W

expand.gridまたはouterを使用して、xとyの組み合わせごとにzを生成する必要があります。例えば:

library(ggplot2)
testPts <- transform(expand.grid(x=1:10,y=1:5),z=sin(x*y))
(ggplot(data=testPts, aes(x=x, y=y, z=z))
 + stat_contour()
 + geom_point(aes(colour=z))
)

enter image description here

2
agstudy