使用ggplot绘制多参数值对应密度函数及仅显示最后参数曲线问题求解
问题原因
- 你定义的
f_bdsn依赖全局环境中的alpha1、delta1变量取值,而ggplot2的stat_function不会在添加图层时就捕获当前的参数值,只会在最终执行绘图命令时才调用传入的函数。 - 你两次添加图层都绑定了同一个全局变量,等到实际绘图时全局变量已经被修改为最后一次赋值的
alpha1=0、delta1=6,两条曲线参数完全一致就会重合,看起来只显示了最后一组的结果。同时你原有代码中第一组参数的delta1没有显式赋值,也会引发取值异常。
解决方法
将密度函数改写为支持参数直接传入的形式,添加图层时通过stat_function的args参数传入对应分组的参数,完全避免依赖全局变量,修正后的代码如下:
library(ggplot2) # 改写函数,参数直接传入,不依赖全局变量 f_bdsn <- function(x, alpha, delta){ 2*(1 + delta * x^2) * dnorm(x) * pnorm(alpha * x) / (1 + delta) } p9 <- ggplot(data.frame(x = c(-4, 4)), aes(x = x)) + # 第一组参数:alpha=0,delta=0 stat_function(fun = f_bdsn, args = list(alpha = 0, delta = 0), aes(colour = "alpha=0, delta=0")) + # 第二组参数:alpha=0,delta=6 stat_function(fun = f_bdsn, args = list(alpha = 0, delta = 6), aes(colour = "alpha=0, delta=6")) + labs(colour = "参数组合") p9
内容的提问来源于stack exchange,提问作者Masoud
相关产品推荐
相关产品推荐

