您应该创建一个使用 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.units
eg 中的参数grid.rect
强制绘图函数使用本机 ( xscale
/ yscale
) 视口坐标。
just=c(0, 0)
表示xlim[1], ylim[1]
表示矩形的左下节点。