如何在ggplot2 R图中准确设置坐标轴的范围?

3
使用ggplot绘制图表时,我希望能够精确地设置坐标轴。我知道可以使用coord_cartesian()来设置绘图范围(例如,对于x轴,我指定了2到4的限制),但是这样会在我指定的范围左右留下一些空间

enter image description here

上面MWE的代码:
library(ggplot2)

data.mwe = cbind.data.frame(x = 1:5, y = 2:6)

plot.mwe = ggplot(data = data.mwe, aes(x=x,y=y)) + geom_line() + coord_cartesian(xlim = c(2,4))
print(plot.mwe)

我的期望结果是一个图表,显示区域恰好在我指定的限制范围内。
我知道如何设置ggplot2 R绘图中的轴限制(如何为ggplot2 R绘图设置轴限制?,但它不能回答我的问题,因为它会产生上述不需要的结果或者削减观察值(使用scale_x_continuouslimits参数)。我知道我可以调整限制范围来获得更小的范围,但我正在寻找一个干净的结果。至少我想知道实际范围与我指定的范围相差多少,以便我可以相应地调整我的限制。

1
这个问题类似于当前的问题。 - jazzurro
1个回答

6
添加 expand = FALSE:
library(ggplot2)

data.mwe = data.frame(x = 1:5, 
                      y = 2:6)

ggplot(data.mwe, aes(x, y)) + 
    geom_line() + 
    coord_cartesian(xlim = c(2, 4), 
                    expand = FALSE)


正是我所需要的!我知道这几乎是一个新问题,但是否有任何功能可以仅切换两个轴中的一个的 expand = F?在您的示例中,y 范围也不再扩展,如果我想要它扩展呢? - mts
3
使用scale_x_continuous代替coord_cartesian: ggplot(data.mwe, aes(x, y)) + geom_line() + scale_x_continuous(limits = c(2, 4), expand = c(0, 0))expand参数需要一个长度为2的扩展常数向量来控制两个边距的扩展程度,而不是一个布尔值,其他方面与原先的用法相同。 - alistaire
很好,再次感谢!不幸的是,scale_x_continuous也会删除范围之外的观测值。诚然,在我的MWE中这没有什么区别,但在我的一些应用程序中却有所不同。 - mts
我能想到的唯一可能会有影响的方式是使用平滑函数,这种情况下你可以在ggplot之外构建模型。 - alistaire

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接