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

R-计算概率并翻转累积曲线(ECDF)的x/y轴,r,ecdf,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),

在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")
库(rgdal)
setwd(“G:/data”)

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

n <- 32
k <- floor(n/2)
x <- 1 - runif(n)^2
x <- c(x, sample(x, k, replace=TRUE))
有了这个方便的数据结构
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)

您好,您能否提供一个小数据集,以便人们重现您的问题?例如,将
elevation.tif
缩小到玩具大小(100x100 px左右),然后执行
readDGAL
并使用
dput
将结果转换为文本形式,您可以将其粘贴到此处。你可以用你的问题来改进它。效果非常好!是否可以在图表中添加第二行?如果可以,如何添加?当然可以。使用
ggplot2
的自然方法是在第一个数据帧上附加一个数据帧,使用一个或多个字段来区分两个数据集中的记录。有关详细信息,请参阅。
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))
})
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)
print(g.ECDF + coord_flip() + ggtitle("Axes Flipped"))