我希望在一个绘图中有一个插图,它占绘图区域(图形所在区域)宽度和高度的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
Run Code Online (Sandbox Code Playgroud)
这使得插入物处于绝对顶部并且还使用了25%的设备宽度.如何将其更改为图形所在区域的坐标和宽度?
Vin*_*ynd 14
您可以使用它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()
Run Code Online (Sandbox Code Playgroud)
查看subplot
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) )
Run Code Online (Sandbox Code Playgroud)
用于par("plt")
找出绘图区域的面积(似乎类似于 vincents 的答案)。奇怪的是: 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
Run Code Online (Sandbox Code Playgroud)