0

我想用 x 轴上的分箱数据和 y 轴上的相应概率制作条形图。每个 bin 应包含 100 个观察值。
这是我的工作数据框的快照:

head(covs) y Intercept slope temp heatload cti 1 0 1 1.175494e-38 -7.106242 76 100 2 0 1 4.935794e-01 -7.100835 139 11 3 1 1 3.021236e-01 -7.097794 126 12 4 1 1 1.175494e-38 -7.097927 75 98 5 0 1 1.175494e-38 -7.098462 76 98 6 0 1 1.175494e-38 -6.363284 76 100

和初始执行:

slopes <- as.matrix(covs$slope)
binned.slopes=cut2(slopes, m=100)
heights <- tapply(covs$y,binned.slopes,mean)
barplot(heights, ylim=c(0,1),
    ylab="Probability of permafrost",
    xlab="Slope",     
    col="lightgrey")

结果如下:

在此处输入图像描述

我有两个问题:

  1. 在不牺牲解释力的情况下表示 x 轴的更好方法是什么?问题是间隔都是不同的长度,因为箱是由观察计数决定的。

  2. 在ggplot2中有更好的方法吗?

4

1 回答 1

1

为什么不尝试在连续轴上绘制并单独绘制矩形:

## Generate some sample data
covs <- data.frame(slope=rnorm(4242), y=sample(0:1, 4242, replace=TRUE))

## Sort it by slope (x-values)
covs <- covs[order(covs$slope), ]

## Set up the plot with a continuous x-axis
plot(
    x=covs$slope, 
    y=covs$y, 
    type='n',
    xlab='Slope',
    ylab='Probability of permafrost'
)

## Split the data into bins, and plot each rectangle individually
for (bin in split(covs, ceiling(seq(nrow(covs))/100))) {
    with(bin, rect(min(slope), 0, max(slope), mean(y), col='lightgrey'))
}
rm(bin)
于 2014-04-08T17:29:30.463 回答