我正在尝试用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))
提前致谢!
答案 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()设置。
(也许我应该把它放在上面)