我试图在 R 中以 2 x 2 排列绘制四个散点图(我实际上是通过 rpy2 绘制的)。我希望每个的纵横比都为 1,但也具有相同的比例,因此所有子图的 X 和 Y 刻度相同,以便可以比较它们。我试图这样做par
:
par(mfrow=c(2,2))
# scatter 1
plot(x, y, "p", asp=1)
# scatter 2
plot(a, b, "p", asp=1)
# ...
编辑:
这是我现在拥有的直接示例:
> par(mfrow=c(2,2))
> for (n in 1:4) { plot(iris$Petal.Width, rnorm(length(iris$Petal.Width)), "p", asp=1) }
它创建了正确类型的散点图,但具有不同的比例。在上面的每次调用中设置ylim
和相同并不能解决问题。您仍然会在每个轴上看到非常不同的刻度线和刻度数,这使得散布图难以解释。我希望 X 轴和 Y 轴相同。例如,这个:xlim
plot
for (n in 1:4) { plot(iris$Petal.Width, rnorm(length(iris$Petal.Width)), "p", asp=1, xlim=c(-4, 6), ylim=c(-2, 4)) }
生成错误的结果:
确保在所有子图中使用相同轴的最佳方法是什么?
我所寻找的只是一个axis=same
类似于 to的参数par(mfrow=...)
,这听起来像是 的默认行为lattice
,以使轴在每个子图中共享且相同。
lgautier 用 ggplot 提供了很好的代码,但它需要提前知道轴。我想澄清一下,我想避免遍历每个子图中的数据并自己计算要绘制的正确刻度。如果必须提前知道,那么 ggplot 解决方案比仅仅使用plot
和显式绘图要复杂得多
agstudy 给出了一个带有 lattice 的解决方案。这看起来最接近我想要的,因为您不必显式地预先计算每个散点的刻度位置,但是作为一个新用户,我无法弄清楚如何使格子看起来像一个普通的图。我得到的最接近的是:
> xyplot(y~x|group, data =dat, type='p',
between =list(y=2,x=2),
layout=c(2,2), aspect=1,
scales =list(y = list(relation='same'), alternating=FALSE))
产生:
我怎样才能让它看起来像 R 基础?我不希望这些group
字幕出现在每个子图的顶部,或者不希望在每个散点图的顶部和右侧悬挂未标记的刻度,我只希望散点图的每个 x 和 y 都被标记。我也不是在寻找 X 和 Y 的共享标签——每个子图都有自己的 X 和 Y 标签。并且每个散点中的轴标签必须相同,尽管此处选择的数据没有意义。
除非有一种简单的方法可以使格子看起来像 R 基础,否则听起来答案是没有办法做我在 R 中尝试做的事情(令人惊讶),而不预先计算每个子图中每个刻度的确切位置,这需要提前遍历数据。