R - рассчитать вероятность и перевернуть ось x / y кумулятивной кривой (ECDF) - PullRequest
0 голосов
/ 08 июня 2018

В RI построить кумулятивную кривую, используя функцию ecdf, чтобы показать площадь и высоту.По умолчанию высота отображается на оси x, в области на оси y, где высота указывается в общих значениях (например, 1000–3000 м), и в области вероятности (0,0–1,0).

  • Я хотел бы также показать повышение в процентах / значениях вероятности.

  • Я хотел бы перевернуть ось и визуализировать область по оси xи высота по оси у.

Как я могу это сделать?Я не смог найти решение.

Это мой код:

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

1 Ответ

0 голосов
/ 08 июня 2018

Практически любое решение начнется с создания массива, представляющего все вершины на графике. Они получены путем извлечения координат из объекта 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

Теперь для государственного переворота : просто скажите ggplot2 для переключения осей:

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

Flipped ECDF

...