r:ecdf over histogram

Jua*_*blo 4 plot r histogram cdf

在R中,ecdf我可以绘制经验累积分布函数

plot(ecdf(mydata))
Run Code Online (Sandbox Code Playgroud)

并且hist我可以绘制我的数据的直方图

hist(mydata)
Run Code Online (Sandbox Code Playgroud)

如何在同一个图中绘制直方图和ecdf?

编辑

我尝试做出类似的东西

https://mathematica.stackexchange.com/questions/18723/how-do-i-overlay-a-histogram-with-a-plot-of-cdf

sym*_*ush 7

还有点晚了,这是另一个用第二个y轴扩展@Christoph解决方案的解决方案.

par(mar = c(5,5,2,5))
set.seed(15)
dt <- rnorm(500, 50, 10)
h <- hist(
  dt,
  breaks = seq(0, 100, 1),
  xlim = c(0,100))

par(new = T)

ec <- ecdf(dt)
plot(x = h$mids, y=ec(h$mids)*max(h$counts), col = rgb(0,0,0,alpha=0), axes=F, xlab=NA, ylab=NA)
lines(x = h$mids, y=ec(h$mids)*max(h$counts), col ='red')
axis(4, at=seq(from = 0, to = max(h$counts), length.out = 11), labels=seq(0, 1, 0.1), col = 'red', col.axis = 'red')
mtext(side = 4, line = 3, 'Cumulative Density', col = 'red')
Run Code Online (Sandbox Code Playgroud)

具有CDF,两个刻度和两个y轴的直方图

诀窍如下:你没有为你的情节添加一条线,而是在顶部绘制另一个情节,这就是我们需要的原因par(new = T).然后你必须稍后添加y轴(否则它将在左边的y轴上绘制).

积分到这里(@tim_yates答案)和那里.


vpi*_*pkt 4

有两种方法可以解决这个问题。一种是忽略不同的尺度并在直方图中使用相对频率。这会导致直方图更难读取。第二种方法是改变一个或另一个元素的比例。

我怀疑这个问题很快就会引起您的兴趣,特别是@hadley 的回答。

ggplot2 单尺度

这里有一个解决方案ggplot2。我不确定您会对结果感到满意,因为 CDF 和直方图(计数或相对)处于完全不同的视觉尺度。请注意,此解决方案将数据存储在mydata使用所需变量调用的数据框中x

library(ggplot2)
set.seed(27272)
mydata <- data.frame(x=  rexp(333, rate=4) + rnorm(333))

 ggplot(mydata, aes(x)) + 
     stat_ecdf(color="red") + 
     geom_bar(aes(y = (..count..)/sum(..count..))) 
Run Code Online (Sandbox Code Playgroud)

ggplotecdfhist

基础 R 多尺度

在这里,我将重新调整经验 CDF,以便其最大值不是具有最高相对频率的任何 bin,而不是最大值 1。

h  <- hist(mydata$x, freq=F)
ec <- ecdf(mydata$x)
lines(x = knots(ec), 
    y=(1:length(mydata$x))/length(mydata$x) * max(h$density), 
    col ='red')
Run Code Online (Sandbox Code Playgroud)

基础Recdfist