You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 07:36:03