R语言plot()和概率密度ecdf()绘图函数

---
title: "R 语言中plot()函数和ecdf()函数的使用示例"
author: "cnliutz"
date: "2025-05-18"
output:
  html_document:
    df_print: paged
---
以下是 R 语言中plot()函数和ecdf()函数的使用示例,包含基础用法和可视化展示:
#  1. plot()函数基础用法示例
```{r}
# 示例1: 绘制散点图
x <- 1:10
y <- x^2
plot(x, y, main="散点图示例", xlab="X轴", ylab="Y轴", pch=16, col="blue")

# 示例2: 绘制折线图
x <- seq(0, 2*pi, length.out=100)
y <- sin(x)
plot(x, y, type="l", main="正弦曲线", xlab="角度(弧度)", ylab="正弦值", col="red")

# 示例3: 添加点和线到现有图表
points(x[1:20], y[1:20], pch=19, col="green")  # 添加绿色点
lines(x[21:40], y[21:40], lwd=2, col="purple")  # 添加紫色线

# 示例4: 绘制箱线图
data <- list(组A=rnorm(50, 5, 1), 组B=rnorm(50, 7, 1.5))
boxplot(data, main="箱线图比较", ylab="数值")
```
## 2. ecdf()累积分布函数示例

```{r}
# 生成随机数据
set.seed(123)  # 设置随机种子确保结果可重现
data <- rnorm(1000, mean=0, sd=1)  # 生成1000个正态分布随机数

# 计算经验累积分布函数(ECDF)
empirical_cdf <- ecdf(data)

# 查看特定值的累积概率
print(paste("x <= 0的概率:", empirical_cdf(0)))  # 约为0.5
print(paste("x <= 1.96的概率:", empirical_cdf(1.96)))  # 约为0.975

# 绘制ECDF图
plot(empirical_cdf, 
     main="正态分布的经验累积分布函数", 
     xlab="x值", 
     ylab="累积概率", 
     col="blue", 
     lwd=2)

# 添加理论CDF曲线作为对比
curve(pnorm(x, mean=0, sd=1), 
      add=TRUE, 
      col="red", 
      lwd=2, 
      lty=2)  # 添加标准正态分布的理论CDF曲线

# 添加图例
legend("topleft", 
       legend=c("经验CDF", "理论CDF"), 
       col=c("blue", "red"), 
       lwd=2, 
       lty=c(1, 2))
```
## 3. 自定义 ECDF 图示例
```{r}
# 使用ggplot2绘制更美观的ECDF图
library(ggplot2)

# 生成两组数据进行比较
group1 <- rnorm(100, mean=5, sd=1)
group2 <- rnorm(100, mean=7, sd=1.5)

# 创建数据框
df <- data.frame(
  value = c(group1, group2),
  group = rep(c("组A", "组B"), each = 100)
)

# 使用ggplot2绘制ECDF图
ggplot(df, aes(x = value, color = group)) +
  stat_ecdf(size = 1) +
  labs(
    title = "两组数据的累积分布函数比较",
    x = "数值",
    y = "累积概率",
    color = "组别"
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5, size = 16, face = "bold"),
    axis.title = element_text(size = 12),
    legend.position = "bottom"
  ) +
  scale_color_manual(values = c("组A" = "#3366CC", "组B" = "#CC6677"))
```