Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image 在R中绘制时间序列和图像,以便x轴标签完全对齐_Image_R_Plot - Fatal编程技术网

Image 在R中绘制时间序列和图像,以便x轴标签完全对齐

Image 在R中绘制时间序列和图像,以便x轴标签完全对齐,image,r,plot,Image,R,Plot,我正试图绘制一个时间序列(一个地震仪),并在R中绘制相应的频谱图。 因为我想将时间序列与频谱图进行比较,所以时间序列上的X轴标签需要与频谱图上的X轴标签对齐。然而,我在这方面遇到了很多麻烦。到目前为止,我能做的最好的事情就是使用 par(mar=c(0,10,0,8)) 并尝试通过调整频谱图边距手动强制频谱图标签与时间序列标签对齐。当然,这只是一个近似值,它们仍然不能完美地排列在一起。有没有办法使下面代码生成的轴相互匹配 par(mfcol=c(2,1)) plot(seq_len(1000)

我正试图绘制一个时间序列(一个地震仪),并在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))

提前谢谢

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

这似乎有效:

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=arguments,并在plot()函数中使用xaxs=“i”来匹配image()的默认值。

事实证明,这比最初看起来更简单。秘密在于制作一个“虚拟图”,然后将图像添加到图中。下面是新的工作代码的外观:

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)

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

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


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

你试过光栅图像吗?需要四个参数才能将图像的角点设置到当前定义的打印空间中(基于现有的x和y比例)。很高兴知道,根据我之前的评论,这适用于
image
以及
rasterImage