単純な等高線図を作成しようとしています。
サンプルコードは以下に添付されています。出力は、ラベルと警告メッセージを含む空のプロットです-
1: stat_contour(): Zero contours were generated
2: In min(x) : no non-missing arguments to min; returning Inf
3: In max(x) : no non-missing arguments to max; returning -Inf
誰かが私がそれを修正するのを手伝ってくれませんか。
library(tidyverse)
# x and y are generated from uniform random distribution
x <- runif(1000, min = -5, max = 5)
y <- runif(1000, min = -5, max = 5)
z <- x^2 + y^2
tbl <- tibble(x, y, z)
ggplot(data = tbl,
aes(x = x,
y = y,
z = z)) +
geom_contour_filled(alpha = 0.8) +
scale_fill_viridis_d(drop = FALSE) +
ドキュメントgeom_contour
とはgeom_contour_filled
、非常に誤解を招くされています。それは物事がするとき最もよく働くことを示唆x
してy
グリッドを形成するが、彼らは格子を形成しない限り、実際には、物事はすべての仕事をしません。
ランダムな(x,y,z)
トリプレットからグリッドを作成するには、このakima::interp
関数を使用できます。たとえば、データから始めます。
library(tidyverse)
# x and y are generated from uniform random distribution
x <- runif(1000, min = -5, max = 5)
y <- runif(1000, min = -5, max = 5)
z <- x^2 + y^2
tbl <- tibble(x, y, z)
grid <- akima::interp(tbl$x, tbl$y, tbl$z)
griddf <- data.frame(x = rep(grid$x, ncol(grid$z)),
y = rep(grid$y, each = nrow(grid$z)),
z = as.numeric(grid$z))
ggplot(data = griddf,
aes(x = x,
y = y,
z = z)) +
geom_contour_filled(alpha = 0.8) +
scale_fill_viridis_d(drop = FALSE)
注意:akima
はの一部ではないtidyverse
ため、結果を手動でtibble / dataframeに変換する必要があり、それを間違えるのは簡単です。正解だと思いますが、関数が対称的であるため、100%確信が持てません。
ここで再形成のための別の解決策に気づきました:https://stackoverflow.com/a/22895190/2554330。あなたはそれが私のものよりも好きかもしれません(またはそうではない、それは好みの問題です)。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加