R:操作和 ggplot2 移动密度曲线不起作用
R: Manipulate and ggplot2 moving density curve not working
以为我会用一对设置良好的例子来问这个问题:
- 第一个示例(第一段代码)具有产品的正态分布,移动限制决定什么通过和失败,产生收益(这个有效,它通过移动 geom_vline ,或红色垂直线)。
- 第二个示例(第二段代码)服从均值变化的正态分布,并且极限固定在 0(我尝试使用操作移动 geom_density 但无法使其工作)
问题:如何使用 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))
第二个示例(移动 geom_density <- 无效):
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))
第一个例子的图片:
根据 lukeA 的评论中的解决方案,这里是使密度曲线随均值移动的代码。
R 中的收益率曲线通过移动分布的均值,并具有固定的接受限度:
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))
以为我会用一对设置良好的例子来问这个问题:
- 第一个示例(第一段代码)具有产品的正态分布,移动限制决定什么通过和失败,产生收益(这个有效,它通过移动 geom_vline ,或红色垂直线)。
- 第二个示例(第二段代码)服从均值变化的正态分布,并且极限固定在 0(我尝试使用操作移动 geom_density 但无法使其工作)
问题:如何使用 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))
第二个示例(移动 geom_density <- 无效):
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))
第一个例子的图片:
根据 lukeA 的评论中的解决方案,这里是使密度曲线随均值移动的代码。
R 中的收益率曲线通过移动分布的均值,并具有固定的接受限度:
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))