2

我正在尝试在 R 中绘制具有相应频谱图的时间序列(地震仪)。由于我想将时间序列与频谱图进行比较,因此时间序列上的 X 轴标签需要与上的 X 轴标签对齐频谱图。但是,我在这方面遇到了很多麻烦。到目前为止我能做的最好的就是使用

par(mar=c(0,10,0,8))

并尝试通过调整频谱图边距手动强制频谱图标签与时间序列标签对齐。当然,这只是近似值,它们仍然不能完美排列。有没有办法使下面代码生成的轴相互匹配?

par(mfcol=c(2,1))
plot(seq_len(1000)*0.01, sin(2*pi*seq_len(1000)*0.01), type="l",xlab="Time",
ylab="Amplitude", main="Time Series", xlim=c(1,10))
image(seq_len(1000)*0.01,seq_len(100)*0.1,array(runif(1000000),dim=c(1000,100)),
xlab="Time", ylab="Frequency", main="Spectrogram", xlim=c(1,10))

提前致谢!

4

4 回答 4

3

这似乎有效:

par(mfcol=c(2,1))
plot(seq_len(1000)*0.01, sin(2*pi*seq_len(1000)*0.01), type="l", xaxs="i")
image(seq_len(1000)*0.01,seq_len(100)*0.1,array(runif(1000000),dim=c(1000,100)),
    xlab="Time", ylab="Frequency", main="Spectrogram")

只需删除 xlim= 参数并在 plot() 函数中使用 xaxs="i" 来匹配 image() 的默认值。

于 2012-08-27T17:53:11.370 回答
2

您可以添加xaxs='i'到调用中plot(这会删除额外的填充,使其与图像图对齐),或者您可以par('usr')在第一个图之后使用来查看 x 限制是什么,并xlim在图像中的调用中使用这些值。

于 2012-08-27T17:49:31.387 回答
1

事实证明,这比最初看起来要容易得多。秘诀是制作一个“虚拟情节”,然后将图像添加到情节中。因此,新的工作代码如下所示:

par(mfcol=c(2,1))
plot(seq_len(1000)*0.01, sin(2*pi*seq_len(1000)*0.01),
type="l",xlab="Time",ylab="Amplitude", main="Time Series")
plot(c(0,10), c(0,10), type="n") #Dummy plot with axis limits for our spectrogram
image(seq_len(1000)*0.01,seq_len(100)*0.1,array(runif(1000000),dim=c(1000,100)),
xlab="Time", ylab="Frequency", main="Spectrogram",add=TRUE)
于 2012-08-27T18:42:05.057 回答
0

与 Greg Snow 的回答类似,但相反,您可以xaxs='r'在调用中添加image如下内容:

par(mar=c(0,10,0,8))
par(mfcol=c(2,1))
plot(seq_len(1000)*0.01, sin(2*pi*seq_len(1000)*0.01), type="l",xlab="Time",
     ylab="Amplitude", main="Time Series", xlim=c(1,10))
image(seq_len(1000)*0.01,seq_len(100)*0.1,array(runif(1000000),dim=c(1000,100)),
      xlab="Time", ylab="Frequency", main="Spectrogram", xlim=c(1,10), xaxs="r")

不要忘记先保存您的 par() 设置。

(也许我应该把它放在上面)

于 2014-12-19T22:49:32.400 回答