R - 计算累积曲线的概率和翻转x / y轴(ECDF)

时间:2018-06-08 12:52:51

标签: r ecdf

在R中,我使用ecdf函数绘制累积曲线,以显示面积与高程。默认情况下,高程绘制在x轴上,y轴上的区域,高程以总值(例如1000-3000m)和概率区域(0.0-1.0)给出。

  • 我想显示百分比/概率值的提升。

  • 我想翻转轴并在x轴和y轴高度可视化区域。

我该怎么做?我找不到解决方案。

这是我的代码:

library(rgdal)
setwd("G:/data")
raster <- readGDAL("elevation.tif")
plot(ecdf(raster$band1), main="Hypsometric curve")

1 个答案:

答案 0 :(得分:0)

几乎任何解决方案都将首先创建一个表示图中所有顶点的数组。它们是通过从ecdf对象中提取坐标获得的。为了说明,让我们生成一些数据。

n <- 32
k <- floor(n/2)
x <- 1 - runif(n)^2
x <- c(x, sample(x, k, replace=TRUE))

这里是标准的ECDF计算和图表,供参考:

f <- ecdf(x)
plot(f, main="Default Plot")

ECDF plot

R更喜欢将数据放入data.frame个对象中。这是一种方式。注意如何略微扩展数据范围以显示曲线的自然端点,该端点从y = 0开始并以y = 1的水平结束:

expand <- function(x, f=1.05, ...) {# Expand a data range
  r <- range(x, ...)
  (r - mean(r)) * f + mean(r) 
}
X <- with(environment(f), {
  x.range <- expand(x)
  data.frame(x=c(x.range[1], x), 
             xend=c(x, x.range[2]),
             y=c(0, y),
             yend=c(0, y))
})

利用这种方便的数据结构X,剩下的就是描述情节。我使用ggplot2

library(ggplot2)
g.ECDF <- ggplot(X, aes(x=x, y=y, xend=xend, yend=yend)) + 
  geom_hline(yintercept=0:1, linetype=2, size=1.0, color="Gray") +
  geom_segment(color="#b0b0b0", size=0.8) +
  geom_point(data=X[-1,]) +
  xlab("Elevation") + ylab("Proportion of Total") + 
  ggtitle("Hypsometric Curve")

print(g.ECDF)

ggplot2's version of the ECDF

现在,对于 coup de grace :只需告诉ggplot2切换轴:

print(g.ECDF + coord_flip() + ggtitle("Axes Flipped"))

Flipped ECDF