7

使用我称之为的低级graphics封装工具绘制一个高度比宽度大 2 倍的“交叉”矩形:

xlim <- c(0, 500)
ylim <- c(0, 1000)
plot.new()
plot.window(xlim, ylim, asp=1)
rect(xlim[1], ylim[1], xlim[2], ylim[2])
lines(c(xlim[1], xlim[2]), c(ylim[1], ylim[2]))
lines(c(xlim[1], xlim[2]), c(ylim[2], ylim[1]))

该图有一个很好的功能:保留了纵横比,因此如果我更改绘图窗口的大小,我会得到相同的高宽比例。

如何获得与grid图形等效的结果?

4

2 回答 2

3

您应该创建一个使用 Square Normalized Parent Coordinates 的视口,请参阅?unit

"snpc": (...) 这对于制作占视口比例但必须是正方形(或具有固定纵横比)的东西很有用。

这是代码:

library('grid')
xlim <- c(0, 500)
ylim <- c(0, 1000)
grid.newpage() # like plot.new()
pushViewport(viewport( # like plot.window()
        x=0.5, y=0.5, # a centered viewport
        width=unit(min(1,diff(xlim)/diff(ylim)), "snpc"), # aspect ratio preserved
        height=unit(min(1,diff(ylim)/diff(xlim)), "snpc"),
        xscale=xlim, # cf. xlim
        yscale=ylim  # cf. ylim
))
# some drawings:
grid.rect(xlim[1], ylim[1], xlim[2], ylim[2], just=c(0, 0), default.units="native")
grid.lines(xlim, ylim, default.units="native")
grid.lines(xlim, rev(ylim), default.units="native")

default.unitseg 中的参数grid.rect强制绘图函数使用本机 ( xscale/ yscale) 视口坐标。 just=c(0, 0)表示xlim[1], ylim[1]表示矩形的左下节点。

于 2014-05-01T08:25:36.247 回答
1

ggplot2grid基于)中,您可以使用以下方法修复纵横比coord_fixed()

library(ggplot2)
ggplot(mtcars, aes(x = wt, y = mpg)) + geom_point() + coord_fixed(ratio = 0.5)

这将固定比率,即使更改图形窗口的大小,比率也将保持不变。

我不确定这是否有帮助,因为您要求提供基于低级grid的解决方案。但我认为它可能仍然有用。

于 2014-05-01T08:26:10.787 回答