在R的网格图形中保留纵横比
要使用我所称的低级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
图形等效的结果?
您应该创建一个使用方形标准化父坐标的视口,请参阅?unit
:
"snpc"
:(...)这对于制作"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")
例如grid.rect
的default.units
参数强制绘图函数使用本地( xscale
/ yscale
)视口坐标。 just=c(0, 0)
表示xlim[1], ylim[1]
表示矩形的左下角节点。
在ggplot2
(基于grid
)中,你可以使用coord_fixed()
来修改高宽比:
library(ggplot2)
ggplot(mtcars, aes(x = wt, y = mpg)) + geom_point() + coord_fixed(ratio = 0.5)
这将修正比率,即使更改图形窗口的大小,比率也将保持不变。
我不确定这是否有帮助,因为您要求提供基于低级grid
的解决方案。 但我认为这可能是有用的。
上一篇: Preserving aspect ratio in R's grid graphics
下一篇: sdk vs facebook