15

プロット領域 (グラフがある領域) の幅と高さの 25% を占めるプロット内のインセットが必要です。

私は試した:

# datasets
d0 <- data.frame(x = rnorm(150, sd=5), y = rnorm(150, sd=5))
d0_inset <- data.frame(x = rnorm(1500, sd=5), y = rnorm(1500, sd=5))

# ranges
xlim <- range(d0$x)
ylim <- range(d0$y)

# plot
plot(d0)

# add inset
par(fig = c(.75, 1, .75, 1), mar=c(0,0,0,0), new=TRUE)
plot(d0_inset, col=2) # inset bottomright

これにより、インセットが完全に右上になり、デバイス幅の 25% も使用されます。グラフがある領域の座標と幅に変更するにはどうすればよいですか?

4

4 に答える 4

15

を使用par("usr")して、プロットの範囲をユーザー座標で取得し、grconvert[XY]それらを で使用する前に正規化されたデバイス座標 (NDC、0 と 1 の間) に変換することができますpar(fig=...)

plot(d0)
u <- par("usr")
v <- c(
  grconvertX(u[1:2], "user", "ndc"),
  grconvertY(u[3:4], "user", "ndc")
)
v <- c( (v[1]+v[2])/2, v[2], (v[3]+v[4])/2, v[4] )
par( fig=v, new=TRUE, mar=c(0,0,0,0) )
plot(d0_inset, axes=FALSE, xlab="", ylab="")
box()

トップライト インセット

于 2013-06-11T10:54:21.560 に答える
9

パッケージsubplot内の関数を見てください。TeachingDemosあなたがやろうとしていることがより簡単になるかもしれません。

次に例を示します。

library(TeachingDemos)
d0 <- data.frame(x = rnorm(150, sd=5), y = rnorm(150, sd=5))
d0_inset <- data.frame(x = rnorm(1500, sd=5), y = rnorm(1500, sd=5))

plot(d0)
subplot( 
  plot(d0_inset, col=2, pch='.', mgp=c(1,0.4,0),
    xlab='', ylab='', cex.axis=0.5), 
  x=grconvertX(c(0.75,1), from='npc'),
  y=grconvertY(c(0,0.25), from='npc'),
  type='fig', pars=list( mar=c(1.5,1.5,0,0)+0.1) )

ここに画像の説明を入力

于 2013-06-11T22:00:20.313 に答える
5

par("plt")プロット領域の面積を調べるために使用します(ヴィンセントの回答に似ているようです)。奇妙なことに、 fig は挿入図のプロット領域のサイズを設定します。したがって、軸を表示すると、インセットのサイズは 25% よりも大きくなります。

# datasets
d0 <- data.frame(x = rnorm(150, sd=5), y = rnorm(150, sd=5))
d0_inset <- data.frame(x = rnorm(1500, sd=5), y = rnorm(1500, sd=5))

# ranges
xlim <- range(d0$x)
ylim <- range(d0$y)

# plot
plot(d0)

# calculate position of inset
plotdim <- par("plt")
xleft    = plotdim[2] - (plotdim[2] - plotdim[1]) * 0.25
xright   = plotdim[2]  #
ybottom  = plotdim[4] - (plotdim[4] - plotdim[3]) * 0.25  #
ytop     = plotdim[4]  #

# set position for inset
par(
  fig = c(xleft, xright, ybottom, ytop)
  , mar=c(0,0,0,0)
  , new=TRUE
  )

# add inset
plot(d0_inset, col=2) # inset bottomright
于 2013-06-11T12:34:24.787 に答える