R:操纵并绘制2移动密度曲线不工作

R:操纵并绘制2移动密度曲线不工作,r,ggplot2,R,Ggplot2,我想我会用一对设置良好的示例来提问: 第一个例子(第一段代码)是产品的正态分布,移动限制决定了通过和失败的内容,产生了收益(这一个有效,它通过移动几何线或红色垂直线来实现) 第二个例子(第二段代码)的正态分布是变化的平均值,极限在0处是固定的(我尝试使用操纵移动geom_密度,但无法使其工作) 问题:如何使用ggplot2移动密度曲线(并使用第二个示例) 第一个例子: require(manipulate) require(ggplot2) set.seed(10) data <-

我想我会用一对设置良好的示例来提问:

  • 第一个例子(第一段代码)是产品的正态分布,移动限制决定了通过和失败的内容,产生了收益(这一个有效,它通过移动几何线或红色垂直线来实现)
  • 第二个例子(第二段代码)的正态分布是变化的平均值,极限在0处是固定的(我尝试使用操纵移动geom_密度,但无法使其工作)
问题:如何使用ggplot2移动密度曲线(并使用第二个示例)

第一个例子:

require(manipulate)
require(ggplot2)

set.seed(10)
data <- data.frame(dens=rnorm(1000, mean=20, sd=3))

# Moving the limit, Production always the same
manipulate(
{
    Pass <- sum(data>Limit)
    Fail <- sum(data<=Limit)
    Yield <- Pass/(Pass+Fail)*100
    labPass <- paste0("Pass=",toString(Pass))
    labFail <- paste0("Fail=",toString(Fail))
    labYield <- paste0("Yield=",formatC(Yield,format="f", digits=2),"%")

    ggplot(data) +
        geom_density(aes(x=dens), fill="white") +
        labs(title="Product Yield") +
        xlim(-5,30) +
        xlab("Normal Dist. mean=20, sd=3") +
        ylab("Density") +
        geom_vline(xintercept=Limit, linetype="longdash", colour="red") +
        annotate("text", x=Limit-3, y=0.10, label=labPass)+
        annotate("text", x=Limit-3, y=0.09, label=labFail)+
        annotate("text", x=Limit-3, y=0.08, label=labYield)
},
Limit=slider(5,20, initial=5))
require(操纵)
需要(ggplot2)
种子(10)

数据基于lukeA评论中的解决方案,以下是用平均值移动密度曲线的代码

通过移动分布平均值,并具有固定接受极限,R中的屈服曲线:
require(操纵)
需要(ggplot2)
种子(10)

数据我试图为操纵包添加“操纵”标记,但无法。我建议事先更改
dens
,如
ggplot(transform(data,dens=dens-20+MoveM))+geom_density(aes(x=dens))
或添加
MoveM
作为另一个
数据列。有趣的包顺便说一句。感谢您的解决方案,将额外的列添加到数据帧工作得非常好!
require(manipulate)
require(ggplot2)

set.seed(10)
data <- data.frame(dens=rnorm(1000, mean=20, sd=3))

# Limit the same, Production mean moves
manipulate(
{
    Pass <- sum(data-20+MoveM>0)
    Fail <- sum(data-20+MoveM<=0)
    Yield <- Pass/(Pass+Fail)*100
    labPass <- paste0("Pass=",toString(Pass))
    labFail <- paste0("Fail=",toString(Fail))
    labYield <- paste0("Yield=",formatC(Yield,format="f", digits=2),"%")

    ggplot(data) +
        geom_density(aes(x=dens-20+MoveM), fill="white") +
        labs(title="Product Yield") +
        xlim(-5,30) +
        xlab("Normal Dist. mean=variable, sd=3") +
        ylab("Density") +
        geom_vline(xintercept=0, linetype="longdash", colour="red") +
        annotate("text", x=-3, y=0.10, label=labPass)+
        annotate("text", x=-3, y=0.09, label=labFail)+
        annotate("text", x=-3, y=0.08, label=labYield)
},
MoveM=slider(0,20, initial=20))
require(manipulate)
require(ggplot2)

set.seed(10)
data <- data.frame(dens=rnorm(1000, mean=20, sd=3))

# Limit the same, Production mean moves
manipulate(
{
    Pass <- sum(data$dens-20+MoveM>0)
    Fail <- sum(data$dens-20+MoveM<=0)
    Yield <- Pass/(Pass+Fail)*100
    labPass <- paste0("Pass=",toString(Pass))
    labFail <- paste0("Fail=",toString(Fail))
    labYield <- paste0("Yield=",formatC(Yield,format="f", digits=2),"%")
    # ANSWER to Question: Use extra column in dataframe
    data$shiftDens <- data$dens - 20 + MoveM

    ggplot(data) +
        geom_density(aes(x=shiftDens), fill="white") +
        labs(title="Product Yield") +
        xlim(-5,30) +
        xlab("Normal Dist. mean=variable, sd=3") +
        ylab("Density") +
        geom_vline(xintercept=0, linetype="longdash", colour="red") +
        annotate("text", x=-3, y=0.10, label=labPass)+
        annotate("text", x=-3, y=0.09, label=labFail)+
        annotate("text", x=-3, y=0.08, label=labYield)
},
MoveM=slider(0,20, initial=20))