Практически любое решение начинается с создания массива, представляющего все вершины графика. Они получаются путем извлечения координат из объекта 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](https://i.stack.imgur.com/EtzkU.png)
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)
![версия ECDF от ggplot2](https://i.stack.imgur.com/F8JPI.png)
А теперь совершенный удар: просто скажите ggplot2
переключить оси:
print(g.ECDF + coord_flip() + ggtitle("Axes Flipped"))
![Перевернутый ECDF](https://i.stack.imgur.com/P5VC1.png)
person
whuber
schedule
08.06.2018
elevation.tif
до размера игрушки (100x100 пикселей или около того), затем выполнитеreadDGAL
и используйтеdput
, чтобы преобразовать результат в текстовую форму, которую вы можете вставить сюда. Вы можете отредактировать свой вопрос, чтобы улучшить его. - person akraf   schedule 08.06.2018