【问题标题】:Plot ecdf and density into same graph with differing y-axis将 ecdf 和密度绘制到具有不同 y 轴的同一图中
【发布时间】:2015-05-22 12:07:34
【问题描述】:

考虑以下两个图:

x <- rnorm(1000, sd=10)
plot(density(x))
plot(ecdf(x))

请注意不同的 y 轴范围:

现在我想将这两个放在一个图表和两个 y 轴中。

我知道基础知识(add=TRUEpar(new=TRUE)),但add=TRUE 由于比例不同而不起作用,par(new=TRUE) 需要指定 x 轴以避免过度绘图。

有没有一种简单的方法可以将这两者整合到一个图中,左 y 轴密度,右 y 轴 ecdf?

【问题讨论】:

标签: r plot


【解决方案1】:

通常不建议创建具有两个不同 Y 比例的绘图,但在这种情况下最简单的方法是

    x <- rnorm(1000, sd=10)
    xlim=c(-50, 40)
    par(mar = c(5,4,4,5))
    plot(density(x), xlim=xlim)
    par(new=TRUE)
    plot(ecdf(x), axes=F, xlab="", ylab="", main="", xlim=xlim)
    axis(4)
    mtext("ECDF",4, 3)

如果你有理由不想设置相同的 xlim 值,你可以借用 the answer from this question 从上一个图中提取 xlim

getplotlim<-function() {
    usr <- par('usr')
     xr <- (usr[2] - usr[1]) / 27 # 27 = (100 + 2*4) / 4
     yr <- (usr[4] - usr[3]) / 27
     list(
         xlim = c(usr[1] + xr, usr[2] - xr),
         ylim = c(usr[3] + yr, usr[4] - yr)
     )
}


x <- rnorm(1000, sd=10)
par(mar = c(5,4,4,5))
plot(density(x))
par(new=TRUE)
plot(ecdf(x), axes=F, xlab="", ylab="", main="", xlim=getplotlim()$xlim)
axis(4)
mtext("ECDF",4, 3)

【讨论】:

  • 我想避免设置 =xlim,因为我必须使绘制两个图的函数更加复杂。但我必须说我真的很喜欢你的第二个建议,我会经常使用它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-08
  • 1970-01-01
  • 2021-07-18
  • 2015-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多