如何在R中调整CCDF图的概率区间至10^(-3)到10^(-8)
在R中限制CCDF图的概率区间为10(-3)到10(-8)
要只展示CCDF的概率区间10(-3)到10(-8),核心是先筛选出对应y值范围的数据,再配合对数y轴呈现这个指数级区间,具体修改如下:
步骤说明
- 筛选数据:从生成的
ccdf数据框中,保留y值在1e-8到1e-3之间的记录,仅基于这些数据绘图 - 对数刻度:目标区间是10的负幂次,用对数y轴(
log="y")能让数据趋势更清晰 - 同步调整辅助线:确保红色辅助线也只绘制筛选后的数据段
修改后的完整代码
# 生成数据 n01 <- rnorm(1000, mean = 27947623, sd = 575.839) ecdf_n01 <- ecdf(n01) # 计算CCDF并筛选目标区间数据 ccdf <- data.frame(x = sort(n01), y = 1 - ecdf_n01(sort(n01))) # 筛选y在1e-8到1e-3之间的行 ccdf_filtered <- ccdf[ccdf$y >= 1e-8 & ccdf$y <= 1e-3, ] # 绘制筛选后的CCDF,启用对数y轴 plot(ccdf_filtered, log = "y", # 设置y轴为对数刻度 xlab = "x值", ylab = "互补累积概率 (1 - F(x))", main = "CCDF (概率区间:1e-8 ~ 1e-3)") # 绘制红色辅助线,仅用筛选后的数据 x_filtered <- ccdf_filtered$x y_filtered <- mean(n01)/x_filtered lines(x_filtered, y_filtered, col="red")
额外说明
- 如果数据量较小,可能
1e-8对应的y值不存在(比如1000个数据的最小非零CCDF值是1/1000=1e-3),此时可根据实际数据调整下限,比如改成1e-4 - 若需要更精细的y轴刻度,可手动设置:
axis(2, at = 10^seq(-8, -3, 1), labels = 10^seq(-8, -3, 1))
内容的提问来源于stack exchange,提问作者pnlp
相关产品推荐
相关产品推荐

