首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R:操纵和ggplot2移动密度曲线不起作用

R:操纵和ggplot2移动密度曲线不起作用
EN

Stack Overflow用户
提问于 2015-04-29 07:41:48
回答 1查看 426关注 0票数 1

我想用一个很好的例子来问这个问题:

  • 第一个示例(第一个代码块)具有产品的正态分布,移动限制确定什么通过和失败,从而产生一个屈服(此示例工作,并通过移动geom_vline或红色垂直线)。
  • 第二个示例(第二个代码块)的均值为正态分布,限制为0(我尝试使用操纵移动geom_density,但无法使其工作)

问题:如何使用ggplot2操作以移动密度曲线(并使我的第二个示例生效)?

第一个例子:

代码语言:javascript
复制
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))

第二个示例(移动geom_density <-不工作):

代码语言:javascript
复制
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))

第一个示例的图像:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-02 10:25:00

基于lukeA的注释中的一个解决方案,下面是用平均值移动密度曲线的代码。

R中的收益率曲线,通过移动分布的平均值,并具有一个固定的接受极限:

代码语言:javascript
复制
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))

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29937316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档