The concept of the empirical CDF (ECDF) of a sample is very simple. First, the value of the ECDF below the minimum observation is $0$ and its value above the maximum observation is $1.$ Second, sort the data from smallest to largest. If there are $n$ observations (all distinct), then the ECDF jumps up by $1/n$ at each observation. If there are ties, the jump is $d/n$ for $d$ values tied at the same value. In R, the expression `ecdf` does the work. (You might want to read the R documentation for `ecdf`.) For moderate and large sample sizes the ECDF is often a good approximation of the distribution of the population from which the data are randomly sampled (shown in red in the plots below). Examples (in R): set.seed(813) x = runif(50, 0, 10); plot(ecdf(x)); rug(x) curve(punif(x, 0, 10), add=T, col="red", n=10001) [![enter image description here][1]][1] set.seed(2019) x = rpois(10, 3); plot(ecdf(x)) curve(ppois(x, 3), add=T, col="red", n = 10001) [![enter image description here][2]][2] set.seed(1066) x = rexp(5000, 1/10); plot(ecdf(x)) curve(pexp(x, 1/10), add-T, col="red") [![enter image description here][3]][3] _Note:_ Q-Q plots (with theoretical and sample quantiles) often amount to ECDF plots with scales suitably distorted so that the population CDF if a straight line. [1]: https://i.sstatic.net/r0aC0.png [2]: https://i.sstatic.net/XRtJE.png [3]: https://i.sstatic.net/3yrs5.png