【问题标题】:r - aligning x-axis image and base plotr - 对齐 x 轴图像和基本图
【发布时间】:2016-11-10 17:25:38
【问题描述】:

当我尝试通过 x 轴将图像图与 xy 图对齐时,x 值之间存在小的错位。不知道如何摆脱它! 请注意底部图中的垂直线与顶部图上的 x 轴未对齐。

par(mfrow=c(2,1))
par(mar=c(0,5,5,5))
image(x=1:100,z=replicate(10, rnorm(100)))
par(mar=c(5,5,0,5))
par(xaxs="i")
plot(1:100,rnorm(100))
abline(v=1:100)

大师,救命!!谢谢!!

PS:无法通过帖子“plot-time-series-and-image-in-r-so-that-x-axis-labels-line-up-perfectly”弄清楚,仍然有问题!

【问题讨论】:

  • 要去掉属于上图的x轴吗?
  • 不,我想完美地对齐两个 x 轴。如果您发现它们没有完全对齐。我将 x 轴留在顶部图上,以使错位更加明显。

标签: r image plot


【解决方案1】:

问题在于image 将数据绘制为具有给定宽度的单元格网格。如果imagex 的长度等于nrow(z),则它指定单元格的中点。在您的示例中,这为您提供了以 1:100 为中心的矩形,有效地导致 x 轴覆盖从 0.5100.5 的范围,从而产生观察到的错位。

为了匹配两个图中的范围,您需要相应地指定 xlimplot。在下面的示例中,我使用n = 10 使事情更加明显。

par(mfrow=c(2,1))
par(mar=c(0,5,5,5))
image(x=1:n,z=replicate(10, rnorm(n)))
par(mar=c(5,5,0,5))
par(xaxs="i")
plot(1:n,rnorm(n), xlim=c(.5,n+.5))
abline(v=1:n)

【讨论】:

  • 是的!好的!我认为这与单元格宽度有关,但没有找到解决方法。确实很有用,非常感谢!
  • 作为给定值向量 time.vec 和 step time.step 的一般解决方案,我做了 xlim=c(time.vec[1] - (0.5 * time.step), max(time .vec) + (0.5 * time.step))
【解决方案2】:

好的,所以这是我过去可能已经想到然后完全忘记的事情之一。 诀窍不仅是调用 par(xaxs="i") 还要强制执行两个 xlim!

par(mfrow=c(2,1))
par(mar=c(0,5,5,5))
image(x=1:100,z=replicate(10, rnorm(100)),xlim=c(0,100))
par(mar=c(5,5,0,5))
par(xaxs="i")
plot(1:100,rnorm(100),xlim=c(0,100))
abline(v=1:100)

【讨论】:

  • xlim 做对了!但是,即使您的解决方案使两个轴同步,它也不能正确考虑网格的宽度,另请参阅我的答案。它将最右边的列切成两半,并在左边留下一个空白列;如果您绘制较小范围的图,您可以更好地看到它,例如1:10
猜你喜欢
  • 1970-01-01
  • 2018-10-29
  • 1970-01-01
  • 1970-01-01
  • 2021-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-08
相关资源
最近更新 更多