10

我有一个很长的 10000 个观察值序列,我想可视化。问题是,如果我只是正常绘制它,时间维度将被挤压,并且我想要可视化的时间序列的任何细节都不会很明显。例如:

 plot((sin(1:10000/100)+rnorm(10000)/5),type='l')

我想要以某种方式将以下内容并排绘制在一个巨大的图中,而不使用 par(mfrow=c(1,100))。然后我想导出这个非常宽的图,然后简单地滚动以可视化整个系列。

 plot((sin(1:10000/100)+rnorm(10000)/5)[1:100],type='l')
 plot((sin(1:10000/100)+rnorm(10000)/5)[101:200],type='l')
 plot((sin(1:10000/100)+rnorm(10000)/5)[201:300],type='l')
 .....

最终,我希望将 3 或 4 个这些巨大的地块叠放在一起,并带有par(mfrow=c(4,1)).

我知道答案与pin设置有关par,但我不断得到Error in plot.new() : plot region too large。我猜这pin与与其他par参数的交互有关

如果我们能得到完全正确的像素高度和宽度,就会获得奖励积分。由于导出大小不完美,因此该图最好不要跳过随机像素。

如果图像可以编码为.html. 并以这种方式看待

4

3 回答 3

8

您可能会考虑另一种选择是 svg,它在任何情况下都会产生比 png/jpeg 更好的质量。

就像是

svg(width = 2000, height = 7)
par(mfrow=c(4,1), mar = c(4, 4, 0, 2))
for (i in 1:4){
    plot((sin(1:10000/100)+rnorm(10000)/5),type='l', 
         bty = "l", xaxs = "i")
}
dev.off()

将产生一个非常宽的图,大小刚刚超过 1MB,在 Chrome 中渲染得非常好。

请注意,此处的宽度和高度以英寸为单位。

PS svg 还提供了交互式图形的潜力。刚刚看到一个很好的示例,它允许用户选择长时间序列的一个区域进行放大,请参见用于 Web 的 Dynamic and Interactive R Graphics: The gridSVG Package中的图 22,这是 Paul Murrell 和 Simon Potter 的草稿。

于 2013-10-03T09:41:03.670 回答
4

这可能是开罗特有的问题,也可能是您的机器上缺少 RAM。以下代码在具有 8GB RAM 的 Windows 7 机器上运行良好。

png("wide.png", width = 1e5, height = 500)
plot((sin(1:10000/100)+rnorm(10000)/5),type='l')
dev.off()

如果我将宽度更改为1e6像素,则 R 会成功创建文件(大约需要一分钟),但是我可用的图像查看软件无法显示那么大的图像。

于 2013-10-03T08:48:17.520 回答
1

我会走一些替代路线。首先,以高分辨率观看整个情节究竟有什么意义?如果您正在搜索某种异常或异常情况,那么这就是数据处理的用途 :-) 。考虑诸如 find allx > 3sigma或进行 FFT 等的事情。

接下来,如果您真的想用肉眼检查整个事情,那么编写一些 R-TclTK 代码或使用dynamicGraphoriplotszoom生成可以“实时”滚动的交互式图形怎么样。

ETA:IIRC RStudio 也有用于交互式图形滚动和缩放的工具。

于 2013-10-03T11:31:57.423 回答