频率和密度的直方图在R中同时为轴

时间:2014-04-29 00:52:20

标签: r

我可以像这样结合密度和频率图

hist(ex, col="red", prob=TRUE)
lines(density(ex), col="red")

但也可以在每一侧都有两个轴?举个例子:

fake plot

更新:取决于实际数据的解决方案:

#margin from right
par(mar=c(5, 4, 4, 4) + 0.1)

hist(ex, col="red", prob=TRUE)
lines(density(ex), col="red")

# axis ticks
axis(4, at=seq(0,0.4,0.1)*50, labels=seq(0,0.4,0.1)*2500)
# axis label
mtext("Frequency", side=4, line=3)

1 个答案:

答案 0 :(得分:0)

重新评论:根据上面的代码,您可以使用基础R 快速查看公式 - 您无需手动定义轴。显而易见的困难是密度或频率不是漂亮的/圆形的数字(如果你想要它们都是圆的那么蜱可能会在不同的地方)。我认为以规定的间隔保持密度更为明智。这也需要不断休息。

对于绘图,我将密度分配给LHS轴,但这很容易调整。

histfreq <- function(X, lines=TRUE, ...) {

        par(mar=c(5, 4, 4, 4) + 0.1)
        h <- hist(X, plot=FALSE)
        n.obs <- length(na.omit(X))
        d <- density(na.omit(X))
        h <- hist(X, prob=TRUE, yaxt="n",ylim = c(0,max(h$density,d$y)*1.1),...)

        # axis ticks and labels
        # y          
        axis(2, at = pretty(c(0,h$density)), 
            labels = formatC( pretty(c(0,h$density)), digits = 1, format = "f"))

        # 2nd y
        axis(4, at = pretty(c(0,h$density)), 
            labels = formatC(signif(pretty(c(0,h$density)) * n.obs * 
                 unique(diff(h$breaks)), digits = 2),  digits=0, format = "f"))

        mtext("Frequency" ,  side=4, line=3)

        if (lines) lines(d, ...)          
    }

# Call plot
histfreq(rnorm(57), col="red")