将ecdf和密度绘制到具有不同y轴的相同图形中

时间:2015-05-22 12:07:34

标签: r plot

考虑以下两个图:

po [self class]

请注意不同的y轴范围:

density ecdf

现在我想将这两个放在一个图形和两个y轴上。

我知道基础知识(x <- rnorm(1000, sd=10) plot(density(x)) plot(ecdf(x)) add=TRUE),但par(new=TRUE)由于尺度不同而无效,add=TRUE需要指定x轴以避免过度绘图。

有没有一种简单的方法可以将这两者合二为一,左y轴密度,右y轴ecdf?

1 个答案:

答案 0 :(得分: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)

enter image description here

如果你有一个不想设置相同的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)