R 中数据框中所有列的 ECDF 图

ECDF plot for all columns in the dataframe in R

我需要在一个图中绘制数据帧所有列的 ECDF,并在轴上也得到一个 x_limit。

我写的函数:

library(lattice)
library(latticeExtra)

  ecdf_plot <-  function(data){
  
     # Drop columns with only NA's
     data <- data[, colSums(is.na(data)) != nrow(data)]
     data$P_key <- NULL
  
     ecdfplot(~ S12, data=data, auto.key=list(space='right'))
  }

问题: 上述函数中的 ECDF 仅绘制 S12 列,但我需要为数据框中的所有列绘制它。我知道我可以做 S12 + S13 + ... 但是源数据发生了变化,我们不确切知道数据框将获得多少列和哪些列。有更好的方法吗?此外,是否有可能使组合图的 x_limit 像 xlim(0,100) 一样只是一个范围?

我认为使用 ggplot 会更容易完成此任务。根据需要设置限制、自定义外观等将非常容易

函数如下所示:

library(dplyr)
library(tidyr)
library(ggplot2)

ecdf_plot <- function(data) {

  data[, colSums(is.na(data)) != nrow(data)] %>%
    pivot_longer(everything()) %>%
    group_by(name) %>%
    arrange(value, by_group = TRUE) %>%
    mutate(ecdf = seq(1/n(), 1 - 1/n(), length.out = n())) %>%
    ggplot(aes(x = value, y = ecdf, colour = name)) +
    xlim(0, 100) +
    geom_step() +
    theme_bw()
}

现在让我们在随机数据帧上测试它:

set.seed(69)

df <- data.frame(unif = runif(100, 0, 100), norm = rnorm(100, 50, 25))

ecdf_plot(df)