R 绘制时间序列的样本

R 绘制时间序列的样本,r,ggplot2,time-series,R,Ggplot2,Time Series,我有一个数据集,它包含连续四天中每秒的观察结果(大约340000个数据点)。这太多,无法在散点图中显示。我只想画一个统一的样本,比如说,2000个时间点 使用ggplot2的“图形语法”方法是否可以实现这一点?我还没有找到任何内置的“采样”修饰符,但也许写一个就足够容易了 library(ggplot2) x <- 1:100000 d <- data.frame(x=x, y=rnorm(length(x))) ggplot(d[sample(x, 2000), ], aes(x

我有一个数据集,它包含连续四天中每秒的观察结果(大约340000个数据点)。这太多,无法在散点图中显示。我只想画一个统一的样本,比如说,2000个时间点

使用
ggplot2
的“图形语法”方法是否可以实现这一点?我还没有找到任何内置的“采样”修饰符,但也许写一个就足够容易了

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()

编辑:我专门寻找采样,而不是平滑或装箱。我的数据显示了模拟一个特定过程一秒钟所需的时间。模拟已经并行化,对于每一个模拟秒,我都有每个相关内核的运行时间(总共8个)。我想通过只绘制原始数据点来显示次优负载平衡。采样的原因只是30万个数据点对于散点图来说太多了:绘制时间太长,可视化效果不好。

如果您想为大数据创建散点图,这里有几个
ggplot2
选项

他们来自中国

几何六角形 您可以设置
箱子的数量

base_plot + geom_hex(bins = 200)

小点 停止过度抽签

base_plot + geom_point(size = I("."))

使用平滑器 这依赖于有一个平滑的方法,将得到你想要的细节,而不会崩溃或花太长时间。在这种情况下,节点数是通过试错选择的(也许您需要更多细节)


您可以使用data参数在
geom_point
调用中使用子集:

... + geom_point(data=d[sample(x,2000),])
这样,您可以使用所有数据自由添加其他几何图形,例如,使用示例数据:

ggplot(d, aes(x=x, y=y)) + geom_hex() + geom_point(data=d[sample(x,2000),])

您必须在某个时候对数据进行采样,您发布的解决方案似乎非常有效。这种方法将比ggplot将实现的任何额外的数据几何/转换更快,占用更少的内存。我不会通过绘制数据黑客的子集来调用绘制数据的子集。@mnel:我会的。这违背了ggplot2语法的美妙之处。数据未经修改进入ggplot,句号。其他一切都是可视化的。@Chase:代码会更简单,我可以在构建ggplot对象的稍后阶段进行采样。(事实上,我正在按照
ggplot(…)+theme_bw()+ylim(…)+aes(…)
的思路做一些事情,如果在
ggplot
调用中进行采样,我必须重复所有操作。)您可能希望在数据的更复杂部分进行更多采样,而在更“线性”的部分进行更少采样。但这取决于你想展示什么
geom_smooth
geom_density
geom_hex
可能有助于更简洁地显示数据的本质。我提供的示例基本上捕捉了数据的内容。当然,总的趋势是这样的,我稍后会做一些装箱或平滑处理;但首先我想绘制原始数据,但数据太多了!有没有办法得到一个样本(除了用数据填充外)?如果你想绘制数据的子集,那么就绘制数据的子集吧!在这种情况下,如果您没有绘制原始数据,最好明确说明这些内容。在ggplot调用之外修改数据以使可视化更容易也是非常有效和正常的ggplot用法。重复一条写给Chase的注释:代码会更简单,我可以在构建ggplot对象的稍后阶段进行采样。(事实上,我正在按照
ggplot(…)+theme_bw()+ylim(…)+aes(…)
的思路做一些事情,如果在
ggplot()
调用中进行采样,我必须重复所有操作。)编辑您的问题,以显示如何构建绘图以及为什么绘制子集不起作用。(必须重复这些子集的位置)。更改“活动”数据集的另一种方法是使用
%+%
运算符:
ggplot()%+%d[示例(…),]+…
base_plot + geom_point(size = I("."))
library(mgcv)
base_plot + stat_smooth(method = "gam", formula = y ~ s(x, k = 50))
... + geom_point(data=d[sample(x,2000),])
ggplot(d, aes(x=x, y=y)) + geom_hex() + geom_point(data=d[sample(x,2000),])