如何在R语言中合并绘制两个密度函数的连续密度曲线?
在R语言中合并两个概率密度曲线的方法
嗨,我来帮你搞定把两个PDF曲线合并到同一张图的问题!其实用curve函数就能轻松实现,关键是用好add=TRUE参数,下面给你一步步演示:
方法一:使用基础绘图系统(curve函数)
首先假设你已经有了两个自定义的概率密度函数,我先举个示例(你可以直接替换成自己的函数):
# 定义第一个PDF:标准正态分布的概率密度函数 pdf_normal <- function(x) dnorm(x, mean = 0, sd = 1) # 定义第二个PDF:伽马分布的概率密度函数 pdf_gamma <- function(x) dgamma(x, shape = 2, rate = 1)
接下来分两步绘制:
- 先绘制第一条曲线,设置好x轴范围(根据你的PDF有效区间调整)、颜色、标签等:
curve(pdf_normal, from = -3, to = 5, col = "blue", lwd = 2, main = "叠加的概率密度曲线", xlab = "x", ylab = "概率密度")
- 叠加第二条曲线,核心就是加上
add=TRUE参数,让它画在已有的图上:
curve(pdf_gamma, from = -3, to = 5, col = "red", lwd = 2, add = TRUE)
最后可以加个图例区分两条曲线:
legend("topright", legend = c("标准正态分布PDF", "伽马分布PDF"), col = c("blue", "red"), lwd = 2)
方法二:用ggplot2绘制(更灵活美观)
如果你习惯用ggplot2,也可以用stat_function来实现:
library(ggplot2) # 生成覆盖两个PDF的x值序列 x_seq <- seq(-3, 5, length.out = 1000) # 绘制叠加曲线 ggplot(data.frame(x = x_seq), aes(x = x)) + stat_function(fun = pdf_normal, color = "blue", size = 1) + stat_function(fun = pdf_gamma, color = "red", size = 1) + labs(title = "叠加的概率密度曲线", x = "x", y = "概率密度") + theme_minimal()
小提示
- 一定要确保
from和to的范围能覆盖两个PDF的有效取值区间,不然会看不到完整曲线; - 如果你的PDF是分段函数,记得在定义函数时处理好定义域逻辑;
- 可以通过调整
lwd(线宽)、lty(线型)让曲线的区分度更高。
内容的提问来源于stack exchange,提问作者Apple_Tree




