У меня есть набор данных, который содержит наблюдения за каждую секунду из четырех последовательных дней (примерно 340 000 точек данных). Это слишком много для отображения на диаграмме рассеяния. Я хотел бы построить только единый образец, скажем, 2000 точек времени.Задание образца временного ряда
Можно ли достичь этого с помощью подхода «грамматика графики» ? Я не нашел встроенного модификатора «выборки», но, возможно, его достаточно просто написать?
library(ggplot2)
x <- 1:100000
d <- data.frame(x=x, y=rnorm(length(x)))
ggplot(d[sample(x, 2000), ], aes(x=x, y=y)) + geom_point()
Это то, как это может быть «взломан» путем изменения данных, передаваемых в ggplot. Но я не хочу изменять данные, просто отфильтруйте его, чтобы включить только образец.
ggplot(d, aes(x=x, y=y)) + ??? + geom_point()
EDIT: Я специально искал для отбора проб, не сглаживая или биннинга. Данные, которые у меня есть, показывают время, необходимое для моделирования одной секунды определенного процесса. Моделирование было распараллелено, и для каждой моделируемой секунды у меня есть время выполнения для каждого из задействованных ядер (всего 8). Я хочу показать не оптимальную балансировку нагрузки, построив только исходные точки данных. Причиной выборки является то, что 300 000 точек данных слишком велики для графика рассеяния: график занимает слишком много времени, и визуализация не является хорошей.
Вы должны попробовать свои данные в какой-то момент AFAIK, и решение, которое вы опубликовали, похоже, достаточно эффективно. Этот подход будет быстрее и займет меньше памяти, чем любая дополнительная геометрия/преобразование данных, которые будет реализовывать ggplot. – Chase
Я бы не назвал построение подмножества данных, построив подмножество данных * взлома *. – mnel
@mnel: Я делаю. Это противоречит синтаксису ggplot2. Данные переходят в ggplot немодифицированный, период. Все остальное - визуализация. – krlmlr