从R中的绘图中获取xlim

从R中的绘图中获取xlim,r,plot,R,Plot,我想要一个hist和一个density在同一个图上,我正在尝试: 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) myPlot我认为最好的解决方案是在绘制密度时修复它们 否则,请输入plot

我想要一个hist和一个density在同一个图上,我正在尝试:

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)

myPlot我认为最好的解决方案是在绘制密度时修复它们

否则,请输入plot.default(plot.R)代码

xlab=“”
ylab=“”
log=“”

xy您是否考虑过在第一个图中指定您自己的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)

myPlot为什么不使用
ggplot2

library(ggplot2)

set.seed(42)
df <- data.frame(x = rnorm(500,mean=10,sd=5),y = rlnorm(500,sdlog=1.1))

p1 <- ggplot(df) + 
  geom_histogram(aes(x=y,y = ..density..),binwidth=2) +
  geom_density(aes(x=x),fill="green",alpha=0.3) 
print(p1)
库(ggplot2)
种子(42)
df使用
par(new=TRUE)
很少是最好的解决方案。许多绘图函数都有一个选项,如
add=TRUE
,该选项将添加到现有绘图中(包括注释中提到的直方图绘图函数)


如果您确实需要这样做,请查看
par
函数的
usr
参数,执行
mylims如果出于任何原因您无法使用
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)
绘图(序号(0.8,9.8,1),10:19)

usr您可以使用
hist(…,add=TRUE)
在同一个绘图上绘图。@刘敏昭我可能会将您的评论设置为我接受的答案
library(ggplot2)

set.seed(42)
df <- data.frame(x = rnorm(500,mean=10,sd=5),y = rlnorm(500,sdlog=1.1))

p1 <- ggplot(df) + 
  geom_histogram(aes(x=y,y = ..density..),binwidth=2) +
  geom_density(aes(x=x),fill="green",alpha=0.3) 
print(p1)
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)