CodeNoob:
問題の説明
私はプロットにしたいこと(〜4000)の行の数千を持っています。しかし、使用してすべてのラインをプロットする実行不可能であるgeom_line()
とちょうど例えば使用alpha=0.1
高い線の密度、どこではないがある例示します。私が出会ったPythonで似たような特に解答の第二のプロットは本当に良さそうに見えます、しかし、似た何かがで達成することができる場合、私は今ありませんggplot2
。したがって、このような何か:
例えば、データセットは、
それはパターンを示すセットでこれを実証するためにはるかに理にかなって、今の私は、ランダムな洞曲線を生成しました:
set.seed(1)
gen.dat <- function(key) {
c <- sample(seq(0.1,1, by = 0.1), 1)
time <- seq(c*pi,length.out=100)
val <- sin(time)
time = 1:100
data.frame(time,val,key)
}
dat <- lapply(seq(1,10000), gen.dat) %>% bind_rows()
試しましたヒートマップ
私はヒートマップを試してみました、ここで答えたように、しかし、このヒートマップは、(ラインのように)完全に軸点以上の接続を考えるのではなく、「熱」は表示されませんあたりの時点を。
質問
どのように使用して、Rで私たちすることができますggplot2
プロットに最初の図に示したものとsimmilarラインのヒートマップを?
ロビン・ゲルトバッハ:
あなたのデータは非常に均一な水玉密度になります。
私はこのようないくつかの少しより多くの興味深いデータを生成しました:
gen.dat <- function(key) {
has_offset <- runif(1) > 0.5
time <- seq(1, 1000, length.out = 1000)
val <- sin(time / 100 + rnorm(1, sd = 0.2) + (has_offset * 1.5)) *
rgamma(1, 20, 20)
data.frame(time,val,key)
}
dat <- lapply(seq(1,1000), gen.dat) %>% bind_rows()
私たちはその後、2D密度の推定値を得ます。kde2dはありませんpredict
、我々はLOESSでそれをモデル化するための機能を
dens <- MASS::kde2d(dat$time, dat$val, n = 400)
dens_df <- data.frame(with(dens, expand_grid( y, x)), z = as.vector(dens$z))
fit <- loess(z ~ y * x, data = dens_df, span = 0.02)
dat$z <- predict(fit, with(dat, data.frame(x=time, y=val)))
それをプロットすると、この結果を取得します。
ggplot(dat, aes(time, val, group = key, color = z)) +
geom_line(size = 0.05) +
theme_minimal() +
scale_color_gradientn(colors = c("blue", "yellow", "red"))
これは、すべてに大きく依存しています:
- シリーズの数
- シリーズの解像度
- kde2dの密度
- 黄土のスパン
あなたの走行距離は異なる場合がありますので、