在R中绘制时间序列和图像,使x轴标签完美排列

时间:2012-08-27 17:01:41

标签: image r plot

我正在尝试用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 个答案:

答案 0 :(得分: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()的默认值。

答案 1 :(得分:2)

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

答案 2 :(得分: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)

答案 3 :(得分: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()设置。

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