获取与 ggplot + stat_ecdf() 关联的数据

Get data associated to ggplot + stat_ecdf()

我喜欢 ggplot2 包的 stat_ecdf() 功能部分,我发现它对于探索数据系列非常有用。然而,这只是视觉上的,我想知道它是否可行 - 如果是的话如何 - 获得相关的 table?

请查看以下可重现的示例

p <- ggplot(iris, aes_string(x = "Sepal.Length")) + stat_ecdf() # building of the cumulated chart 
p
attributes(p) # chart attributes
p$data # data is iris dataset, not the serie used for displaying the chart

我们可以重新创建数据:

#Recreate ecdf data
dat_ecdf <- 
  data.frame(x=unique(iris$Sepal.Length),
             y=ecdf(iris$Sepal.Length)(unique(iris$Sepal.Length))*length(iris$Sepal.Length))
#rescale y to 0,1 range
dat_ecdf$y <- 
  scale(dat_ecdf$y,center=min(dat_ecdf$y),scale=diff(range(dat_ecdf$y)))

下面 2 个图看起来应该是一样的:

#plot using new data
ggplot(dat_ecdf,aes(x,y)) +
  geom_step() +
  xlim(4,8)

#plot with built-in stat_ecdf
ggplot(iris, aes_string(x = "Sepal.Length")) +
  stat_ecdf() +
  xlim(4,8)

正如@krfurlong 在 中向我展示的那样,ggplot2 中的 layer_data 函数可以让您准确地找到您正在寻找的内容,而无需重新创建数据。

p <- ggplot(iris, aes_string(x = "Sepal.Length")) + stat_ecdf()
p.data <- layer_data(p)

p.data、"y" 中的第一列包含 ecdf 值。 "x" 是图中 x 轴上的 Sepal.Length 值。