Если присмотреться, можно увидеть, что график, на который вы ссылаетесь, состоит из многих, многих, многих точек, а не линий.
Пакет ggpointdensity
выполняет аналогичную визуализацию. Обратите внимание, что при большом количестве точек данных возникают некоторые проблемы с производительностью. Я использую версию разработчика, потому что она содержит аргумент method
, который позволяет использовать различные оценки сглаживания и, очевидно, помогает лучше справляться с большими числами. Также есть версия CRAN.
Вы можете настроить сглаживание с помощью аргумента adjust
.
Я увеличил плотность интервалов х вашего кода, чтобы он выглядел больше как строки. Тем не менее, немного сократили количество «линий» на графике.
library(tidyverse)
#devtools::install_github("LKremer/ggpointdensity")
library(ggpointdensity)
set.seed(1)
gen.dat <- function(key) {
c <- sample(seq(0.1,1, by = 0.1), 1)
time <- seq(c*pi,length.out=500)
val <- sin(time)
time = seq(0.02,100,0.1)
data.frame(time,val,key)
}
dat <- lapply(seq(1, 1000), gen.dat) %>% bind_rows()
ggplot(dat, aes(time, val)) +
geom_pointdensity(size = 0.1, adjust = 10)
#> geom_pointdensity using method='kde2d' due to large number of points (>20k)
Создано в 2020-03-19 пакетом представ. (v0.3.0)
обновление Спасибо пользователю Роберту Гертенбаху за создание более интересных примеров данных . Вот предлагаемое использование ggpointdensity для этих данных:
library(tidyverse)
library(ggpointdensity)
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()
ggplot(dat, aes(time, val, group=key)) +stat_pointdensity(geom = "line", size = 0.05, adjust = 10) + scale_color_gradientn(colors = c("blue", "yellow", "red"))
Создано в 2020-03-24 пакетом Представить (v0 .3.0)