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")

egのdefault.units引数はgrid.rect、プロット関数がネイティブ ( xscale/ yscale) ビューポート座標を使用するように強制します。 が四角形の左下のノードを表すjust=c(0, 0)ことを示します。xlim[1], ylim[1]

于 2014-05-01T08:25:36.247 に答える
1

ggplot2(ベースになっている)ではgrid、次を使用してアスペクト比を修正できます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 に答える