从R中的情节中获取xlim

jim*_*iki 9 plot r

我想在同一个地块上有一个直方图和一个密度,我正在尝试这个:

myPlot <- plot(density(m[,1])), main="", xlab="", ylab="")
par(new=TRUE)

Oldxlim <- myPlot$xlim
Oldylim <- myPlot$ylim

hist(m[,3],xlim=Oldxlim,ylim=Oldylim,prob=TRUE)
Run Code Online (Sandbox Code Playgroud)

但我无法访问myPlot的xlim和ylim.

有没有办法从myPlot中获取它们?我还应该做些什么呢?

Gre*_*now 6

par(new=TRUE)如果有的话,很少使用最佳解决方案.许多绘图功能都有一个选项add=TRUE,可以添加到现有的绘图中(包括评论中提到的直方图的绘图功能).

如果你真的需要这样做,那么看看函数的usr参数,do 会给出用户坐标中现有图的x和y限制.但是,当您在新绘图上使用该信息时,请确保设置或新绘图中使用的实际坐标将超出您指定的4%. parmylims <- par("usr")xaxs='i'

功能grconvertX和知识grconvertY也很有用.它们可以用于或用于此目的,但相比之下可能过度杀伤par("usr"),但它们可用于在其他坐标系中找到限制,或在用户坐标中查找绘图区域中间的值.


Ada*_*ley 5

您是否考虑在第一个图中指定自己的xlim和ylim(将它们设置为适当的值)然后再次使用这些值来设置第二个图中直方图的限制?

只需通过自己绘制密度,您就应该能够计算出两个轴的最小值和最大值的合理值,然后在下面的代码中替换这些值的xmin,xmax,ymin和ymax.

就像是;

myPlot <- plot(density(m[,1])), main="", xlab="", ylab="", xlim =c(xmin, xmax), ylim = c(ymin, ymax)

par(new=TRUE)

hist(m[,3],xlim=c(min, max),ylim=c(min, max),prob=TRUE)
Run Code Online (Sandbox Code Playgroud)


doj*_*uba 5

如果出于任何原因您无法使用range()以获得限制,我会遵循@Greg 的建议。par仅当参数“xaxs”和“yaxs”设置为“s”(默认值)并且坐标范围扩展 4% 时,这才有效:

plot(seq(0.8,9.8,1), 10:19)
usr <- par('usr')
xr <- (usr[2] - usr[1]) / 27 # 27 = (100 + 2*4) / 4
yr <- (usr[4] - usr[3]) / 27
xlim <- c(usr[1] + xr, usr[2] - xr)
ylim <- c(usr[3] + yr, usr[4] - yr)
Run Code Online (Sandbox Code Playgroud)